Python 在2D矩阵中存储两个for循环输出

Python 在2D矩阵中存储两个for循环输出,python,numpy,Python,Numpy,我有一个3D矩阵“数据”,其尺寸为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)]

我有一个3D矩阵“数据”,其尺寸为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)
out=[]
对于范围内的i(np.形状(数据)[0]):
对于范围内的j(np.形状(数据)[1]):
a=数据[i,j:]

b=a[(a>25)&(a您正在使用
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)

如果您想利用
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]])

它将输出存储在数组而不是矩阵中。我希望输出是尺寸为100X200的二维矩阵
out
是一个列表,从
[]
并随着每个
追加而增长。具体来说,它将是一个数字列表,因为追加的是
c
b
的长度。当然,你可以将该列表转换为一个数组,尽管它是1d。为什么你想要2d输出?因为我想要“out”的等高线图为什么你要在平面列表中收集值?为什么不列出清单?
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]])