我有一个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矩阵。相反,我得到一个数组 请帮忙
答案 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
list
个i
。在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