gpt4 book ai didi

python - 使用 Numpy 重新排列矩阵元素

转载 作者:太空狗 更新时间:2023-10-29 20:46:13 25 4
gpt4 key购买 nike

我有一个 NumPy 矩阵,我已对其进行简化以举例说明:

       a  b  c  d  e  f 
A = [[0, 1, 2, 3, 4, 5],
b [1, 0, 3, 4, 5, 6],
c [2, 3, 0, 5, 6, 7],
d [3, 4, 5, 0, 7, 8],
e [4, 5, 6, 7, 0, 9],
f [5, 6, 7, 8, 9, 0]]

“交叉点”的数字很重要,但它们的顺序不正确。我想重新排列行和列,使新顺序为 [a、d、b、e、c、f],但我称之为“交集”的这个值是相同的。

下面我已经开始按照我想要的方式转换矩阵。填充“e”行涉及查看上面的交叉点 (e,a) (= 4),然后 (e,d) (=7),然后 (e,b) (=5),(e,e) , (e,c), 和 (e,f)

       a  d  b  e  c  f
A1= [[0, 3, 1, 4, 2, 5],
d [3, 0, 4, 7, 5, 8],
b [1, 4, 0, 5, 3, 6],
e [4, 7, 5,

谁能建议如何以这种方式重新排列我的矩阵?

最佳答案

编辑:我刚刚偶然发现了一个使用 advanced indexing 的 NumPy 解决方案:

#                 a  b  c  d  e  f
A = numpy.array([[0, 1, 2, 3, 4, 5],
[1, 0, 3, 4, 5, 6],
[2, 3, 0, 5, 6, 7],
[3, 4, 5, 0, 7, 8],
[4, 5, 6, 7, 0, 9],
[5, 6, 7, 8, 9, 0]])

# a d b e c f
new_order = [0, 3, 1, 4, 2, 5]
A1 = A[:, new_order][new_order]

这是一个可以转移到 NumPy 的纯 Python 解决方案:

#     a  b  c  d  e  f
A = [[0, 1, 2, 3, 4, 5],
[1, 0, 3, 4, 5, 6],
[2, 3, 0, 5, 6, 7],
[3, 4, 5, 0, 7, 8],
[4, 5, 6, 7, 0, 9],
[5, 6, 7, 8, 9, 0]]

# a d b e c f
new_order = [0, 3, 1, 4, 2, 5] # maps previous index to new index
A1 = [[A[i][j] for j in new_order] for i in new_order]

结果:

>>> pprint.pprint(A1)
[[0, 3, 1, 4, 2, 5],
[3, 0, 4, 7, 5, 8],
[1, 4, 0, 5, 3, 6],
[4, 7, 5, 0, 6, 9],
[2, 5, 3, 6, 0, 7],
[5, 8, 6, 9, 7, 0]]

这是一个修改A的版本:

A[:] = [A[i] for i in new_order]
for row in A:
row[:] = [row[i] for i in new_order]

关于python - 使用 Numpy 重新排列矩阵元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10936767/

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