微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

numpy的有效向量选择

如何解决numpy的有效向量选择

| 有没有一种有效的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
生成值的整个向量,还是我一次只能索引一个?     

解决方法

我认为您可以尝试类似的方法:
array2d[ix_(nonzeroValidIndices[0],nonzeroValidIndices[1])]
或者,如果您真的想使用
nonzeroValidCoordinates
unzip = lambda l: [list(li) for li in zip(*l)]
array2d[ix_(unzip(nonzeroValidCoordinates))]
资料来源:http://www.scipy.org/NumPy_for_Matlab_Users#head-13d7391dd7e2c57d293809cff080260b46d8e664     ,这样的事情怎么样:
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数组实际上是从您的问题中得出的。不知道ѭ10是什么,似乎就像您将数据复制到相同大小的数组中一样。     ,是的,当然,您可以将值获取为
nonZeroData = array2d[nonzeroValidIndices]
如果map是新的字典,则可以
map = dict(zip(nonzeroValidCoordinates,nonZeroData))
如果这是现有的字典,
map.update(zip(nonzeroValidCoordinates,nonZeroData))
如果是数组,那么
map[nonzeroValidIndices] = nonZeroData
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。