gpt4 book ai didi

python - 通过循环迭代 numpy 数组的元素

转载 作者:行者123 更新时间:2023-12-04 08:01:22 26 4
gpt4 key购买 nike

我有一个非常简单的问题,我无法从 numpy 引用文档中快速弄清楚。
假设我有一个 numpy 数组 labels = np.array([1, 2, 3]) .
我还有另一个数组 arr = np.array([1, 1, 1, 2, 2, 2, 3, 3, 3]) .
我想随机采样 arr 的索引.假设我们的指数是 [0, 3, 6] .
现在,我想让这些索引对应的元素在 labels 中循环一个.所以,由于 arr[0] == 1 ,我们将设置 arr[0] = 2 .自 arr[3] == 2 ,我们将设置 arr[3] = 3 .自 arr[6] == 3 ,我们将设置 arr[6] = 1 .
所以,回顾一下:

arr = np.array([1, 1, 1, 2, 2, 2, 3, 3, 3])
labels = np.unique(arr)
idx = np.array([0, 3, 6]) # randomly generate indices [0, 3, 6]
new_arr == np.array(2, 1, 1, 3, 2, 2, 1, 3, 3]) # this is the array I want
这看起来很简单,但我找不到一种优雅的方式来快速做到这一点!

最佳答案

如果我没听错的话,你可以合并np.rollnp.random.randint , IE。:

sample_idx = np.roll(np.random.randint(len(arr), 3), shift=1)                                                                                                                                                                                            
sample = [labels[i] for i in sample_idx]
即随机抽取 3 个索引并滚动 1 个。这应该是要重新映射到标签的最终索引。
编辑
知道了。您可以分两步完成:
new_arr = arr.copy()
new_arr[idx] = np.roll(labels, -1) # fixed the shift to -1
输出:
array([2, 1, 1, 3, 2, 2, 1, 3, 3])

关于python - 通过循环迭代 numpy 数组的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66449407/

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