gpt4 book ai didi

python - 用于编辑 numpy 计数数组的一行解决方案? (Python)

转载 作者:太空狗 更新时间:2023-10-30 01:05:23 24 4
gpt4 key购买 nike

我想制作一个 numpy 数组,其中包含某个值(1-3 之间)在特定位置出现的次数。例如,如果我有:

a = np.array([[1,2,3], 
[3,2,1],
[2,1,3],
[1,1,1]])

我想像这样取回一个数组:

[[[ 1  0  0]
[ 0 1 0]
[ 0 0 1]]

[[ 0 0 1]
[ 0 1 0]
[ 1 0 0]]

[[ 0 1 0]
[ 1 0 0]
[ 0 0 1]]

[[ 1 0 0]
[ 1 0 0]
[ 1 0 0]]]

数组告诉我 1 在第一个位置出现一次,2 在第二个位置出现一次,3 在第三个位置出现一次,1 在第四个位置出现一次,等等。稍后,我会有更多输入相同维度的数组,我想将值的总和添加到这个计数数组。

我现在的代码是:

a = np.array([[1,2,3],
[3,2,1],
[2,1,3],
[1,1,1]])

cumulative = np.zeros((4,3,3))

for r in range(len(cumulative)):
for c in range(len(cumulative[0])):
cumulative[r, c, a[r,c]-1] +=1

这确实给了我想要的输出。但是,我想将 for 循环压缩成一行,使用类似于这样的一行:

cumulative[:, :, a[:, :]-1] +=1

这条线不起作用,我在网上找不到任何关于如何执行此操作的信息。有什么建议吗?

最佳答案

IIUC,你可以利用广播:

In [93]: ((a[:, None] - 1) == np.arange(3)[:, None]).swapaxes(2, 1).astype(int)
Out[93]:
array([[[1, 0, 0],
[0, 1, 0],
[0, 0, 1]],

[[0, 0, 1],
[0, 1, 0],
[1, 0, 0]],

[[0, 1, 0],
[1, 0, 0],
[0, 0, 1]],

[[1, 0, 0],
[1, 0, 0],
[1, 0, 0]]])

关于python - 用于编辑 numpy 计数数组的一行解决方案? (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44991076/

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