gpt4 book ai didi

python - 获取索引映射的数组的子数组的有效方法

转载 作者:太空狗 更新时间:2023-10-30 02:32:04 35 4
gpt4 key购买 nike

我有一个矩阵a。我需要得到它的一个子矩阵,它的索引基本上来自主矩阵索引的映射(这个映射不一定是 1-1)。我有以下代码来生成子矩阵,这里的映射被认为是 sum

import numpy as np
def transform(A):
B=np.zeros(A.flatten().shape[0])
for i in range(A.flatten().shape[0]):
multi_idx=np.unravel_index(i,A.shape)
B[np.sum(multi_idx)]=A[multi_idx] #the mapping applied on the indices: B[np.sum(multi_idx)]
return B
A=np.arange(27).reshape([3,3,3])
print A
print transform(A)

输出:

[[[ 0  1  2]
[ 3 4 5]
[ 6 7 8]]

[[ 9 10 11]
[12 13 14]
[15 16 17]]

[[18 19 20]
[21 22 23]
[24 25 26]]]
[ 0. 9. 18. 21. 24. 25. 26. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

最佳答案

np.ogrid 是一种根据数组中的索引创建表达式的便捷方式。例如,

import numpy as np

A = np.arange(27).reshape([3,3,3])
B = np.zeros(A.size)
i, j, k = np.ogrid[0:3, 0:3, 0:3]
B[i+j+k] = A
print(B)

产量

[  0.   9.  18.  21.  24.  25.  26.   0.   0.   0.   0.   0.   0.   0.   0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

注意赋值

B[X] = A

相当于

B[X.ravel()] = A.ravel()

并且分配是按从左到右的顺序完成的。因此,如果 X 有很多重复值,则只有最后一个值最终会影响 B。这具有按照您希望的方式处理 map 的非一对一性的效果。

关于python - 获取索引映射的数组的子数组的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20223452/

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