gpt4 book ai didi

python numpy减去作为矩阵的元素

转载 作者:太空宇宙 更新时间:2023-11-03 11:25:40 25 4
gpt4 key购买 nike

使用 numpy,如何将 numpy 数组中的矩阵元素相减?

a = np.array([ [ [1., 2., 3.],    [4., 5., 6.],    [7., 8., 9.]    ],
[ [20., 21., 22.], [23., 24., 25.], [26., 27., 28.] ],
[ [30., 31., 32.], [33., 34., 35.], [36., 37., 38.] ]
])

或者用简单的英语:

a = ([matrix1], [matrix2], [matrix3])

我想得到一个计算如下的np.array:

[matrix1-matrix1][matrix1-matrix2][matrix1-matrix3]

[matrix2-matrix1][matrix2-matrix2][matrix2-matrix3]

[matrix3-matrix1][matrix3-matrix2][matrix3-matrix3]

Diagonal 将是矩阵中具有零值的矩阵。

我怎样才能做到这一点?

最佳答案

你的 a 是一个 3d 数组

In [258]: a = np.array([ [ [1., 2., 3.],    [4., 5., 6.],    [7., 8., 9.]    ],
.....: [ [20., 21., 22.], [23., 24., 25.], [26., 27., 28.] ],

.....: [ [30., 31., 32.], [33., 34., 35.], [36., 37., 38.] ]
.....: ])
In [259]: a.shape
Out[259]: (3, 3, 3)

可以通过索引访问二维数组

In [260]: a[0,:,:]
Out[260]:
array([[ 1., 2., 3.],
[ 4., 5., 6.],
[ 7., 8., 9.]])

并且可以通过以下方式获得 3 个二维数组的元组:

In [261]: (a[0,:,:],a[1,:,:],a[2,:,:])
Out[261]:
(array([[ 1., 2., 3.],
[ 4., 5., 6.],
[ 7., 8., 9.]]),
array([[ 20., 21., 22.],
[ 23., 24., 25.],
[ 26., 27., 28.]]),
array([[ 30., 31., 32.],
[ 33., 34., 35.],
[ 36., 37., 38.]]))

这等同于您的 (matrix1, matrix2, matrix3) 表达式。我正在使用 2d array 而不是 matrix 因为 numpy 有一个名为 matrix 的数组子类,所以该术语可以令人困惑。

生成子数组交叉差异的一种方法是使用广播。我使用 None 语法来扩展 a 的维度。

In [262]: a[:,None,:,:]-a[None,:,:,:]
Out[262]:
array([[[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]],

[[-19., -19., -19.],
[-19., -19., -19.],
[-19., -19., -19.]],

...

[[ 10., 10., 10.],
[ 10., 10., 10.],
[ 10., 10., 10.]],

[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]]]])
In [263]: _.shape
Out[263]: (3, 3, 3, 3)

这个新数组的形状是4d,可以认为是一个3x3数组的3x3数组。是的,对角元素 A[i,i,:,:] 都是 0。

In [264]: A=a[:,None,:,:]-a[None,:,:,:]
In [265]: A[2,2,:,:]
Out[265]:
array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])

关于python numpy减去作为矩阵的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34472883/

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