numpy中的有效向量选择

jq6vz3qz  于 2022-12-13  发布在  其他
关注(0)|答案(3)|浏览(100)

有没有一种有效的numpy机制,可以从一个二维数组生成一个数组的值,并给出该数组的索引列表?
具体地说,我有一个二维坐标列表,它表示二维numpy数组中感兴趣的值。

nonzeroValidIndices = numpy.where((array2d != noDataValue) & (array2d != 0))
nonzeroValidCoordinates = zip(nonzeroValidIndices[0],nonzeroValidIndices[1])

从这里开始,我通过循环坐标并索引到numpy数组中来构建一个Map,一次一个,类似于下面这个简化的例子:

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

我有几个大规模的数据集,我正在迭代这个算法,所以我对一个有效的解决方案很感兴趣。通过分析,我怀疑array2d[coord]行造成了一些麻烦。有没有更好的向量形式来从array2d生成整个向量值,或者我坚持一次索引一个?

v6ylcynt

v6ylcynt1#

不如这样:

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的结果来索引一个数组,就像我上面所展示的那样。这应该可以完成类似于你正在做的事情,而不需要循环,但是我并不完全清楚你的目标二维数组实际上应该是什么。不知道map是什么,看起来就像你在把数据复制到同样大小的数组中。

vtwuwzda

vtwuwzda2#

是的,当然,您可以将值设为

nonZeroData = array2d[nonzeroValidIndices]

如果Map是一个新法令,您可以

map = dict(zip(nonzeroValidCoordinates,nonZeroData))

如果是现有的法令,

map.update(zip(nonzeroValidCoordinates,nonZeroData))

如果是数组,则

map[nonzeroValidIndices] = nonZeroData
wgx48brx

wgx48brx3#

我觉得你可以试试这样的方法:

array2d[ix_(nonzeroValidIndices[0],nonzeroValidIndices[1])]

或者,如果您确实要使用nonzeroValidCoordinates

unzip = lambda l: [list(li) for li in zip(*l)]
array2d[ix_(unzip(nonzeroValidCoordinates))]
  • 来源:* 链接

相关问题