修改NumPy数组的特定行/列

44

如何修改NumPy数组中的特定行或列?

例如,我有一个NumPy数组如下:

P = array([[1, 2, 3],
           [4, 5, 6]])

我该如何将第一行的元素[1,2,3]更改为[7,8,9],以便P变成:

P = array([[7, 8, 9],
           [4, 5, 6]])

同样的,我如何将第二列的值 [2, 5] 改为 [7, 8]

P = array([[1, 7, 3],
           [4, 8, 6]])
3个回答

66

使用 Python 中的方括号索引符号,可以选择或修改 NumPy 数组的行和列。

要选择 2D 数组中的,请使用 P[i]。例如,P[0] 将返回 P 的第一行。

要选择,请使用 P[:, i]:基本上意味着“选择所有行”。例如,P[:, 1] 将选择从 P 的第二列开始的所有行。

如果想要更改数组的一行或一列的值,可以将其分配给长度相同的新列表(或数组)的值。

要更改第一行中的值,请写:

>>> P[0] = [7, 8, 9]
>>> P
array([[7, 8, 9],
       [4, 5, 6]])

要更改第二个 中的值,请编写:

>>> P[:, 1] = [7, 8]
>>> P
array([[1, 7, 3],
       [4, 8, 6]])

你之前说过:“如果你想改变一个数组的一行或一列的值,你可以将它赋值给一个新的列表(或数组),长度相同。”但是直接修改源数组而不进行复制是否可行?我有一个数组a,然后我只需执行a[:,1] = [1, 2, 3],就可以修改我的源数组。直接在原地修改源数组是否存在任何问题,或者这是可以接受的做法? - Matt M.
1
@mbird:如果你愿意让与a共享相同底层数据的任何其他数组也可能被修改,那么修改数组而不复制它是可以的。例如,如果你设置b = a[0],然后设置a[:,1] = [1, 2, 3],那么值的改变也会影响到b。(通常这是期望的结果,但并非总是如此。) - Alex Riley

6

类似地,如果您想选择所有行但仅选择最后两列,可以使用以下方法:

print P[:,1:3]

3
这应该是对上面答案的评论。 - LoMaPh

3
如果您的某一列中有很多元素:
import numpy as np
np_mat = np.array([[1, 2, 2],
                   [3, 4, 5],
                   [5, 6, 5]])
np_mat[:,2] = np_mat[:,2] * 3
print(np_mat)

它在第三列进行了一个乘3的变化:

    [[ 1  2  6]
     [ 3  4 15]
     [ 5  6 15]]

1
这个答案没有回答 OP 有关更改数组特定行/列的问题。 - dspencer
你是什么意思,这显然是特殊列!而且它是一个解决更大矩阵的方案,你不能逐个添加。 - Amirreza SV
1
这有助于了解如何更新特定列的所有值。 - Salma Tofaily

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接