我创建的代码遍历矩阵,依次选择值并组合它们。现在我试图通过将最后一列乘以-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]])]