【问题标题】:Python Array append vectors and then sum the elements of the array positionwise (not elementwise)Python Array 追加向量,然后按位置(不是按元素)对数组的元素求和
【发布时间】:2016-10-27 06:54:06
【问题描述】:

首先我解释一下我想做什么。我有一个函数可以给我一些列表。这些列表具有相同数量的元素,并且它们包含数字,代表 x 轴上的位置。例如其中一个是[-11, -6, -5, -4, -1, 1, 3, 4, 6, 7],另一个是[-11, -6, -5, -3, -1, 1, 2, 4, 5, 7]。条目将始终为整数并按升序排列。

我想多次运行这个函数,最后以一种特定的方式“总结”所有这些向量。想象一下,每个向量都显示了一个人在 x 轴上的位置。我想知道,在say q 实验结束时,每个位置有多少人。但是,它们并非都从 -11 开始或以 7 结束。

例如[-13, -8, -3, -1, 0, 1, 2, 4, 5, 7][-12, -7, -2, -1, 0, 1, 3, 4, 5, 6] 是函数的另外两个有效输出。

我该怎么做?

我的想法是创建一个循环,计算函数,并将这些列表存储到一个数组中,然后使用一些奇怪的矩阵运算。但是我完全被卡住了,这是我的尝试,rep_assign_time2(n,p,m) 是给我列表的函数:

def many_experiments(n,p,m,q):
    jj = 0
    vector_min = []
    vector_max = []
    a = np.array([])
    while jj < q:
        s = rep_assign_time2(n,p,m)
        a = np.concatenate((a,s), axis = 0)      # I add s as an element of a

    for k in range(a.shape):
        ma = max(a[k])
        mi = min(a[k])
        vector_min.append(mi)
        vector_max.append(ma)
    minimum = min(vector_min)
    maximum = max(vector_max)

然后我不知道如何创建一个执行我想要的操作。我想了一个小时,还是没有头绪。你有什么想法吗?

【问题讨论】:

    标签: arrays list python-2.7 numpy


    【解决方案1】:

    您对 NumPy 很幸运,因为它有一个内置的 np.unique。它为我们提供了这样的唯一标签(在这种情况下为轴位置)以及它们在每个这样的标签上的计数。因此,假设您将列表存储为列表,因此列表列表为A,您可以简单地执行 -

    unq,counts = np.unique(A,return_counts=True)
    

    示例运行 -

    In [33]: A = [[-11, -6, -5, -4, -1, 1, 3, 4, 6, 7], \
        ...:      [-11, -6, -5, -3, -1, 1, 2, 4, 5, 7],\
        ...:      [-13, -8, -3, -1, 0, 1, 2, 4, 5, 7],\
        ...:      [-12, -7, -2, -1, 0, 1, 3, 4, 5, 6]]
    
    In [34]: unq,counts = np.unique(A,return_counts=True)
    
    In [35]: unq
    Out[35]: 
    array([-13, -12, -11,  -8,  -7,  -6,  -5,  -4,  -3,  -2,  -1,   0,   1,
             2,   3,   4,   5,   6,   7])
    
    In [36]: counts
    Out[36]: array([1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 4, 2, 4, 2, 2, 4, 3, 2, 3])
    
    In [40]: import matplotlib.pyplot as plt
    
    In [41]: # Plot the results
        ...: plt.bar(unq, counts, align='center')
        ...: plt.grid()
        ...: plt.show()
        ...: 
    

    【讨论】:

    • 所以基本上 unq 给了我一个列表,其中元素是所有元素,并且只有 A 中的元素,只重复一次。然后计数给了我他们每个人的“频率”?
    • @Euler_Salter 是的!你明白了,频率/计数,它是一样的。添加了一个情节以使其更有意义。
    • 非常感谢,最后我还要制作一个条形图,谢谢!啊最后一件事,有没有办法将列表作为元素附加到数组中?我的意思是,不仅仅是将它们粉碎在一起
    • 不确定附加是什么意思,但看看np.concatenate(A) 是否符合您的预期?或者,如果您将它们作为列表 L0L1 等,您可以这样做:np.hstack((L0,L1))np.vstack((L0,L1)) 等等以获得 NumPy 数组。
    • 有点像,但有区别。想象一下 python 中的普通列表说 a = [] 。然后,如果您执行a.append(3),您将在最后一个位置添加一个元素。我想对数组做同样的事情,但是,每个元素都是一个列表,而不是一个数字。因此,如果我从数组中取出元素 0,我将得到第一个列表,依此类推
    猜你喜欢
    • 2018-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多