Python 在2D矩阵中存储两个for循环输出
我有一个3D矩阵“数据”,其尺寸为100(L)X200(B)X50(H)。每个栅格点的值都是随机的。 我想找出每个垂直列中值在10到20之间的点数。输出将是2D矩阵。 为此,我使用了以下代码: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)]
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]])