Python numpy中的有效向量选择

Python numpy中的有效向量选择,python,numpy,Python,Numpy,是否有一种有效的numpy机制,可以从2D数组生成一个值数组,并将索引列表放入该数组中 具体来说,我有一个2D坐标列表,表示2Dnumpy数组中的有趣值。我计算这些坐标如下: nonzeroValidIndices = numpy.where((array2d != noDataValue) & (array2d != 0)) nonzeroValidCoordinates = zip(nonzeroValidIndices[0],nonzeroValidIndices[1]) 从这里

是否有一种有效的numpy机制,可以从2D数组生成一个值数组,并将索引列表放入该数组中

具体来说,我有一个2D坐标列表,表示2D
numpy
数组中的有趣值。我计算这些坐标如下:

nonzeroValidIndices = numpy.where((array2d != noDataValue) & (array2d != 0))
nonzeroValidCoordinates = zip(nonzeroValidIndices[0],nonzeroValidIndices[1])
从这里开始,我通过循环坐标并索引到numpy数组来构建地图,每次一个,类似于这个简化示例:

for coord in nonzeroValidCoordinates:       
    map[coord] = array2d[coord]

我有几个大规模的数据集,我正在迭代这个算法,所以我对一个有效的解决方案感兴趣。通过分析,我怀疑
array2d[coord]
行造成了一些痛苦。是否有更好的向量形式从
array2d
生成一个完整的值向量,还是我一次只能索引一个值

a = np.arange(100).reshape((10,10))
ii = np.where(a > 27) # your nonzeroValidIndices
b = np.zeros_like(a) # your map
b[ii] = a[ii]

您可以使用
np.where
的结果对数组进行索引,如上面所示。这应该可以完成一些类似于您在不循环的情况下所做的事情,但是我不完全清楚您的问题中的目标2D数组实际上应该是什么。由于不知道
map
是什么,看起来就像是在将数据复制到相同大小的数组中

像这样的东西怎么样:

a = np.arange(100).reshape((10,10))
ii = np.where(a > 27) # your nonzeroValidIndices
b = np.zeros_like(a) # your map
b[ii] = a[ii]

您可以使用
np.where
的结果对数组进行索引,如上面所示。这应该可以完成一些类似于您在不循环的情况下所做的事情,但是我不完全清楚您的问题中的目标2D数组实际上应该是什么。由于不知道
map
是什么,看起来就像是在将数据复制到相同大小的数组中

我想你可以试试这样:

array2d[ix_(nonzeroValidIndices[0],nonzeroValidIndices[1])]
或者如果您确实想使用
非零有效坐标

unzip = lambda l: [list(li) for li in zip(*l)]
array2d[ix_(unzip(nonzeroValidCoordinates))]

资料来源:

我想你可以尝试以下方法:

array2d[ix_(nonzeroValidIndices[0],nonzeroValidIndices[1])]
或者如果您确实想使用
非零有效坐标

unzip = lambda l: [list(li) for li in zip(*l)]
array2d[ix_(unzip(nonzeroValidCoordinates))]

来源:

是的,当然,您可以通过以下方式获取值:

nonZeroData = array2d[nonzeroValidIndices]
如果地图是一个新单词,你可以这样做

map = dict(zip(nonzeroValidCoordinates,nonZeroData))
如果它是现有的dict

map.update(zip(nonzeroValidCoordinates,nonZeroData))
如果它是一个数组,那么

map[nonzeroValidIndices] = nonZeroData

是的,当然,你可以得到如下值

nonZeroData = array2d[nonzeroValidIndices]
如果地图是一个新单词,你可以这样做

map = dict(zip(nonzeroValidCoordinates,nonZeroData))
如果它是现有的dict

map.update(zip(nonzeroValidCoordinates,nonZeroData))
如果它是一个数组,那么

map[nonzeroValidIndices] = nonZeroData

我把单词
map
理解为字典。这就是你所说的@Rich吗?我把
map
这个词理解为字典。这就是你所说的“富有”吗?