gpt4 book ai didi

python - 如何使用另一个数组更改一个数组的内容?

转载 作者:行者123 更新时间:2023-12-01 08:50:59 24 4
gpt4 key购买 nike

首先,我知道有一种非常简单的方法可以使用 for 循环来完成此操作,但这是一个每秒需要执行很多次的计算,而 python 中的 for 循环效率太低了去做这个。所以我正在 numpy 中寻找可以解决这个问题的东西。

我有一个值在 0 到 256 之间的 2D 数组 (arr1) 和一个大小为 256 且包含该 2D 数组中数字出现频率的信息的 1D 数组 (arr2)。例如,如果 arr1[0, 0] = 1 和 arr1[0, 1] = 1 并且它们是唯一具有值 1 的值,则 arr2[1] = 2,因为值 1 在 arr1 中存在两次。

我现在想做的,是将频率数字映射到 arr1 上,就像前面的例子中的 arr1[0,0] 和 arr1[0,1] 都会变成 2,因为这是它们之前值的频率.

简而言之,这看起来像这样,但显然这不能只在 for 循环之外工作:

arr1[i,j] = arr2[arr1[i,j]]

是否有一种简单、快速且高效的方法可以使用 numpy 来完成此操作?

最佳答案

给定arr2是一个一维数组,您可以将其写为:

arr1 = arr2[arr1]

在这里,我们进行了元素级“映射”,其中新的 arr1[i, j]是与 arr2 中索引处的值对应的值存储 arr1[i, j] 的旧值.

例如:

>>> a
array([[ 3, 15, 3, 15, 5],
[ 8, 17, 14, 10, 1],
[ 3, 8, 9, 0, 1],
[10, 3, 10, 9, 1]])
>>> b
array([17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,
0])
>>> b[a]
array([[14, 2, 14, 2, 12],
[ 9, 0, 3, 7, 16],
[14, 9, 8, 17, 16],
[ 7, 14, 7, 8, 16]])

此处为索引 i , b[i] = 17 - i ,我们看到当我们计算b[a]时执行了这个映射。 .

万一arr1包含不是有效索引的值,但是从逻辑上讲,这将导致 IndexError .

关于python - 如何使用另一个数组更改一个数组的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53130231/

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