Python numpy中的有效向量选择
是否有一种有效的numpy机制,可以从2D数组生成一个值数组,并将索引列表放入该数组中 具体来说,我有一个2D坐标列表,表示2DPython numpy中的有效向量选择,python,numpy,Python,Numpy,是否有一种有效的numpy机制,可以从2D数组生成一个值数组,并将索引列表放入该数组中 具体来说,我有一个2D坐标列表,表示2Dnumpy数组中的有趣值。我计算这些坐标如下: nonzeroValidIndices = numpy.where((array2d != noDataValue) & (array2d != 0)) nonzeroValidCoordinates = zip(nonzeroValidIndices[0],nonzeroValidIndices[1]) 从这里
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
这个词理解为字典。这就是你所说的“富有”吗?