在2D矩阵中存储两个用于循环输出

时间:2018-01-24 18:02:07

标签: python numpy

我有一个3D矩阵'DATA',其尺寸为100(L)X200(B)X50(H)。每个网格点的值都是随机的。 我想找到每个垂直列中值在10到20之间的点数。输出将是2D矩阵。 为此,我使用了以下代码:

out = []
for i in range(np.shape(DATA)[0]):
    for j in range(np.shape(DATA)[1]):
        a = DATA[i,j,:]
        b = a[(a>25) & (a<30)]
        c = len(b)
        out.append(c)

但我没有得到2D矩阵。相反,我得到一个数组 请帮忙

2 个答案:

答案 0 :(得分:1)

如果您想利用numpy功能:

import numpy as np

data = np.random.randint(0, 50, size=(100,200,50))

range_sum = np.sum(np.logical_and(np.less_equal(data, 20),
                                  np.greater_equal(data, 10)
                                  ), axis=-1)

range_sum.shape
Out[6]: (100, 200)

range_sum
Out[7]: 
array([[11, 12, 12, ..., 13,  9, 10],
       [ 6, 12, 11, ..., 10, 14,  5],
       [11, 11, 16, ..., 10, 12, 15],
       ..., 
       [11, 17,  9, ..., 12, 12, 11],
       [ 9,  8, 10, ...,  7, 15, 12],
       [12, 10, 11, ..., 12, 11, 19]])

答案 1 :(得分:0)

您正在使用out作为列表,并附加每个值。这是对代码的快速修改,可以为您提供所需的结果:

out = []
for i in range(np.shape(DATA)[0]):
    out.append([])  # make a second dim for each i
    for j in range(np.shape(DATA)[1]):
        a = DATA[i,j,:]
        b = a[(a>25) & (a<30)]
        c = len(b)
        out[i].append(c)

更改是我out list listi。在list上的每次迭代中,我们附加一个新的i。然后在内部循环中,我们将值附加到索引numpy.ndarray的列表中。

<强>更新

如果您想要import numpy as np out = np.ndarray(np.shape(DATA)) # initialize to the desired shape for i in range(np.shape(DATA)[0]): for j in range(np.shape(DATA)[1]): a = DATA[i,j,:] b = a[(a>25) & (a<30)] c = len(b) out[i][j] = c ,可以按如下方式修改代码:

scrollTop