gpt4 book ai didi

Python:使用索引数组在两个数组之间进行映射

转载 作者:太空宇宙 更新时间:2023-11-04 00:18:13 26 4
gpt4 key购买 nike

我有一个 numpy 数组

src = np.random.rand(320,240)

和另一个大小为 (2 x (320*240)) 的 numpy 数组 idxidx 的每一列索引结果数组 dst 中的一个条目,例如,idx[:,20] = [3,10] 引用行3,dst中的第10列,假设20对应于src的展平索引,即idxsrcdst 的条目之间建立映射。假设 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 是否是正确的洗牌,则使用 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 有问题。

关于Python:使用索引数组在两个数组之间进行映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50144283/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com