Python 如何使用分隔二维阵列各部分的向量创建遮罩阵列?

Python 如何使用分隔二维阵列各部分的向量创建遮罩阵列?,python,numpy,masked-array,Python,Numpy,Masked Array,假设我有一个标准的2d numpy数组,我们称它为my2darray with value。在这个数组中有两个主要部分。假设对于每一列,都有一个分隔“scenario1”和“scenario2”的特定行。如何创建表示my2darray顶部和底部的2个掩码数组。例如,我对计算上半部分的平均值和下半部分的平均值感兴趣。一个想法是制作一个与my2darray形状相同的面具,但这似乎是在浪费内存。有更好的办法吗?假设我有一个向量,其中长度等于my2darray中的行数(在本例中为6),即 myvecto

假设我有一个标准的2d numpy数组,我们称它为my2darray with value。在这个数组中有两个主要部分。假设对于每一列,都有一个分隔“scenario1”和“scenario2”的特定行。如何创建表示my2darray顶部和底部的2个掩码数组。例如,我对计算上半部分的平均值和下半部分的平均值感兴趣。一个想法是制作一个与my2darray形状相同的面具,但这似乎是在浪费内存。有更好的办法吗?假设我有一个向量,其中长度等于my2darray中的行数(在本例中为6),即

myvector=np.array([9, 15, 5,7,11,11])
我正在将python 2.6与numpy 1.5.0结合使用

使用,我们可以以矢量化的方式创建这样的
2D
掩码。剩下的工作都是沿着第一个轴进行的
求和
,我们可以从
np.einsum
获得帮助。因此,我们将有一个这样的实现-

N = my2darray.shape[0]
mask = myvector <= np.arange(N)[:,None]
uout = np.true_divide(np.einsum('ij,ij->j',my2darray,~mask),myvector)
lout = np.true_divide(np.einsum('ij,ij->j',my2darray,mask),N-myvector)
使用,我们可以以矢量化的方式创建这样的
2D
掩码。剩下的工作都是沿着第一个轴进行的
求和
,我们可以从
np.einsum
获得帮助。因此,我们将有一个这样的实现-

N = my2darray.shape[0]
mask = myvector <= np.arange(N)[:,None]
uout = np.true_divide(np.einsum('ij,ij->j',my2darray,~mask),myvector)
lout = np.true_divide(np.einsum('ij,ij->j',my2darray,mask),N-myvector)
usum = np.einsum('ij,ij->j',my2darray,~mask)
uout = np.true_divide(usums,myvector)
lout = np.true_divide(my2darray.sum(0) - usums,N-myvector)