python - 如何用python中的索引数组替换二维数组的值
问题描述
我打算根据索引数组替换特定索引的值。原来的二维数组是这样的:
A= [[0. 0. 0. 0. 0. 0. 0. ]
[0. 1.98019867 1.96039735 1.90331502 1.81546888 1.70634771 0. ]
[0. 2. 1.98019867 1.92311635 1.83527021 1.72614904 0. ]
[0. 1.98019867 1.96039735 1.90331502 1.81546888 1.70634771 0. ]
[0. 1.92311635 1.90331502 1.84623269 1.75838656 1.64926538 0. ]
[0. 1.83527021 1.81546888 1.75838656 1.67054042 1.56141925 0. ]
[0. 0. 0. 0. 0. 0. 0. ]]
这是索引数组(在每一行中,每对表示一个索引)
index=[[1 2]
[2 4]
[3 4]
[3 5]
[4 2]
[5 2]
[5 5]]
我想将数组 A 中这些索引的值替换为:
zero=0
我希望最终结果是这样的:
modified_A= [[0. 0. 0. 0. 0. 0. 0. ]
[0. 1.98019867 1.96039735 1.90331502 1.81546888 1.70634771 0. ]
[0. 2. 1.98019867 1.92311635 0. 1.72614904 0. ]
[0. 1.98019867 1.96039735 1.90331502 0. 0. 0. ]
[0. 1.92311635 0. 1.84623269 1.75838656 1.64926538 0. ]
[0. 1.83527021 0. 1.75838656 1.67054042 0. 0. ]
[0. 0. 0. 0. 0. 0. 0. ]]
解决方案
您可以使用非常简洁的表示法,例如arr[ind]
,如果您ind
将元组作为包含沿连续轴的连续“想要”元素的索引的元组。
要从索引列表中生成这样的元组,您可以运行:
ind = tuple(np.array(index).T)
结果是:
(array([1, 2, 3, 3, 4, 5, 5]), array([2, 4, 4, 5, 2, 2, 5]))
然后,将0放在想要的位置运行:
arr[ind] = 0
对于一些随机源数组(所有边缘都为零),例如您的源数据样本,我得到:
array([[0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[0. , 1.5488, 0. , 1.6028, 1.5449, 1.4237, 0. ],
[0. , 1.6459, 1.4376, 1.8918, 0. , 1.3834, 0. ],
[0. , 1.7917, 1.5289, 1.568 , 0. , 0. , 0. ],
[0. , 1.0871, 0. , 1.8326, 1.7782, 1.87 , 0. ],
[0. , 1.9786, 0. , 1.4615, 1.7805, 0. , 0. ],
[0. , 0. , 0. , 0. , 0. , 0. , 0. ]])
每个非零元素的值并不重要。请注意,您的“想要的”元素已设置为0。
推荐阅读
- java - 单击 RecyclerView 时显示附加信息
- javascript - 具有不同工具提示的 EChart 系列
- wordpress - 联系表格未连接到电子邮件
- salesforce - 如何在lwc的闪电输入富文本中获取光标位置?
- javascript - 角 10 | 发帖 | 字符串数组追加FormData
- google-sheets - Google 表格:如何通过对另一列中的数字进行排序来移动玩家的姓名?
- html - CSS: Progress bar, second background is appearing below bar instead of overlapping
- javascript - 有没有办法禁用 onscroll 事件以防止页面完全滚动,wordpress
- python - 使用 API 在 Odoo 13 中检索散列密码
- json - 从 unsplash 中提取 slug