如何对数组中的最后一行求反



我创建的代码遍历矩阵,依次选择值并组合它们。现在我试图通过将最后一列乘以-1 来否定它

import numpy as np
arr = np.array([[11, 12, 13, 14,15],
[21, 22, 23, 24,25],
[31, 32, 33, 34,35],
[41, 42, 43, 44,45],
[51, 52, 53, 54,55]])
a=[np.column_stack([arr[:-1, :n], arr[1:, n-1]]) for n in range(1,4)]

我的输出

[array([[11, 21],
[21, 31],
[31, 41],
[41, 51]]),
array([[11, 12, 22],
[21, 22, 32],
[31, 32, 42],
[41, 42, 52]]),
array([[11, 12, 13, 23],
[21, 22, 23, 33],
[31, 32, 33, 43],
[41, 42, 43, 53]])]

要求输出

[array([[11, -21],
[21, -31],
[31, -41],
[41, -51]]),
array([[11, 12, -22],
[21, 22, -32],
[31, 32, -42],
[41, 42, -52]]),
array([[11, 12, 13, -23],
[21, 22, 23, -33],
[31, 32, 33, -43],
[41, 42, 43, -53]])]

这是我试图否定

a=a[:,-1]*-1

这是打印给我的错误信息

TypeError: list indices must be integers or slices, not tuple

有人能给我建议吗?

您可以将-放在arr[1:, n-1]的正前方

a = [np.column_stack([arr[:-1, :n], -arr[1:, n-1]]) for n in range(1, 4)]

输出:

[array([[ 11, -21],
[ 21, -31],
[ 31, -41],
[ 41, -51]]), 
array([[ 11,  12, -22],
[ 21,  22, -32],
[ 31,  32, -42],
[ 41,  42, -52]]), 
array([[ 11,  12,  13, -23],
[ 21,  22,  23, -33],
[ 31,  32,  33, -43],
[ 41,  42,  43, -53]])]

您忘记了a:

a =a[:,-1]*-1

以下是如何做到这一点。

输入:

array([[11, 12, 13, 14, 15],
[21, 22, 23, 24, 25],
[31, 32, 33, 34, 35],
[41, 42, 43, 44, 45],
[51, 52, 53, 54, 55]])

最后一行:arr[-1] *= -1

输出:

array([[ 11,  12,  13,  14,  15],
[ 21,  22,  23,  24,  25],
[ 31,  32,  33,  34,  35],
[ 41,  42,  43,  44,  45],
[-51, -52, -53, -54, -55]])

最后一列:arr[:,-1] *= -1

输出:

array([[ 11,  12,  13,  14, -15],
[ 21,  22,  23,  24, -25],
[ 31,  32,  33,  34, -35],
[ 41,  42,  43,  44, -45],
[ 51,  52,  53,  54, -55]])

您使用以下方式堆叠:

a=[np.column_stack([arr[:-1, :n], arr[1:, n-1]]) for n in range(1,4)]
[array([[11, 21],
[21, 31],
[31, 41],
[41, 51]]), 
array([[11, 12, 22],
[21, 22, 32],
[31, 32, 42],
[41, 42, 52]]), 
array([[11, 12, 13, 23],
[21, 22, 23, 33],
[31, 32, 33, 43],
[41, 42, 43, 53]])]

由于您只想更改数组中每个元素的最后一列的值,因此可以对其进行迭代并进行更改

for i in range (len(a)): a[i][:,-1] *= -1

其输出为:

[array([[ 11, -21],
[ 21, -31],
[ 31, -41],
[ 41, -51]]), 
array([[ 11,  12, -22],
[ 21,  22, -32],
[ 31,  32, -42],
[ 41,  42, -52]]), 
array([[ 11,  12,  13, -23],
[ 21,  22,  23, -33],
[ 31,  32,  33, -43],
[ 41,  42,  43, -53]])]