在numpy张量中创建非零值数组的有效方法?

时间:2015-09-24 03:43:43

标签: python arrays numpy

我有一个3D numpy网格A[ix,iy,iz],我通过A[ A<minval ] = 0A[ A>maxval ] = 0等将其清零来过滤掉元素。然后,我想要执行剩下的物品。现在,我正在做:

for ai in np.reshape(A, nx*ny*nz):
    if( ai > 0 ):
        Atemp.append(ai)

然后我在Atemp上执行统计信息。然而,这需要相当长的时间,我想知道是否有更有效的方法来创建Atemp。对于它的价值,我正在使用这些数组中的几GB数据。

注意:我不希望以不同的方式过滤这些项目。我想将它们归零,然后在A中创建一个包含所有非零元素的临时数组。

2 个答案:

答案 0 :(得分:4)

您可以使用:

Expression<Func<Double, Double>> lambda = a => Math.Sin(a);

例如:

In [3]: x = np.array([0,1,2,3,0,1,2,3,0]).reshape((3,3))

In [4]: x
Out[4]: 
array([[0, 1, 2],
       [3, 0, 1],
       [2, 3, 0]])

In [5]: x[x == 0]
Out[5]: array([0, 0, 0])

In [6]: x[x != 0]
Out[6]: array([1, 2, 3, 1, 2, 3])

答案 1 :(得分:0)

另一种选择:

 Atemp = A.ravel()[np.flatnonzero(A)]