python - Python:使用索引数组在两个数组之间进行映射
问题描述
我有一个 numpy 数组
src = np.random.rand(320,240)
和另一个大小为 (2 x (320*240)) 的 numpy 数组idx
。每列idx
索引结果数组中的一个条目dst
,例如,idx[:,20] = [3,10]
引用第 3 行第 10 列,dst
并且假设20
对应于 的展平索引src
,即建立和idx
的条目之间的映射。假设用全零初始化,我如何在没有循环的情况下将条目复制到它们的目的地?src
dst
dst
src
dst
解决方案
这是执行此操作的规范方法:
>>> import numpy as np
>>>
>>> src = np.random.rand(4, 3)
>>> src
array([[0.0309325 , 0.72261479, 0.98373595],
[0.06357406, 0.44763809, 0.45116039],
[0.63992938, 0.6445605 , 0.01267776],
[0.76084312, 0.61888759, 0.2138713 ]])
>>>
>>> idx = np.indices(src.shape).reshape(2, -1)
>>> np.random.shuffle(idx.T)
>>> idx
array([[3, 3, 0, 1, 0, 3, 1, 1, 2, 2, 2, 0],
[1, 2, 2, 0, 1, 0, 1, 2, 2, 1, 0, 0]])
>>>
>>> dst = np.empty_like(src)
>>> dst[tuple(idx)] = src.ravel()
>>> dst
array([[0.2138713 , 0.44763809, 0.98373595],
[0.06357406, 0.63992938, 0.6445605 ],
[0.61888759, 0.76084312, 0.01267776],
[0.45116039, 0.0309325 , 0.72261479]])
如果您不能确定这idx
是一个正确的 shuffle,那么使用np.full
不出现在src
而不是np.empty
.
>>> dst = np.full_like(src, np.nan)
>>> dst[tuple(idx)] = src.ravel()
>>>
>>> dst
array([[0.27020869, 0.71216066, nan],
[0.63812283, 0.69151451, 0.65843901],
[ nan, 0.02406174, 0.47543061],
[0.05650845, nan, nan]])
如果您发现 中的填充值dst
,则说明有问题idx
。
推荐阅读
- scala - 斯卡拉:火花:java.lang.ClassNotFoundException:
- javascript - OfficeRuntime.storage.setItems 设置存储项失败,返回未知错误
- web-scraping - 使用 python scrapy 抓取动态网站(使用反应构建)的最佳方法
- sql - 在不重复使用不存在的情况下优化此查询,有没有更好的方法来编写此查询?
- apache - Apache htaccess 301 重定向到子文件夹会导致重定向过多
- javascript - 找不到 DialogDataExampleDialog 的组件工厂。你把它添加到@NgModule.entryComponents 了吗?
- python - 过拟合——训练和验证准确率之间的巨大差异
- android - 无法实例化片段找不到片段构造函数android
- python - 在网站上请求后如何发送电报消息?
- r - 选择最高值和行均值的更快方法