Python新手在这里。给定2D numpy数组的列表(mylist
)和参考2D numpy数组(refarr
),我正在寻找一种创建数组(percentage_array
)的方法,其中每个point(i,j)是mylist
数组中相应的(i,j)点的百分比,它们大于refarr
中的[i,j]。我可以通过循环遍历数组中的所有点并通过列表来完成此操作,例如:
percentage_array = numpy.empty(arr.shape)
for i in range(arr.shape[0]):
for j in range(arr.shape[1]):
t = 0
f = 0
for arr in mylist:
if arr[i,j] > refarr[i,j]:
t += 1 # counting the number of arrays for which [i,j] is true
elif arr[i,j] <= refarr[i,j]:
f += 1 # counting the number of arrays for which [i,j] is false
percentage_array[i,j] = t/(t+f) # fraction of arrays which have
# arr[i,j] > refarr[i,j]
...但这既不快也不优雅(我正在处理大量数据)。有更好的方法吗?
答案 0 :(得分:1)
您可以使用
创建一个3d数组a = np.array(myList)
然后您可以使用广播将此数组与原始数组进行比较:
a < refarr # gives a 3D array of booleans because refarr is broadcasted to a 3D array
并计算满足条件的值的百分比,您在第一轴上取平均值:
(a < refarr[None, :, :]).mean(axis = 0)
这种方法的主要缺点是你必须创建一个可能很大的数组a
。否则我会考虑逐个处理数组。