【问题标题】:Modify a particular row/column of a NumPy array修改 NumPy 数组的特定行/列
【发布时间】:2015-01-14 13:07:10
【问题描述】:

如何修改 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]])

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

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

    要选择二维数组中的,请使用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] 并改变我的源数组。仅在不复制的情况下更改源代码是否有任何问题,或者这样的做法是否可行?
    • @mbird:修改数组而不复制它是可以的,只要您对与a 共享相同基础数据的任何其他数组也可能被修改感到高兴。例如,如果您设置b = a[0],然后设置a[: ,1] = [1, 2, 3],则值的更改也会影响b。 (通常这是期望的结果,但并非总是如此。)
    【解决方案2】:

    以类似的方式,例如,如果您只想选择最后两列但可以使用所有行:

    print P[:,1:3]
    

    【讨论】:

    • 这应该是对上述答案的评论。
    【解决方案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]]
    

    【讨论】:

    • 这个答案没有解决 OP 关于更改数组的特定行/列的问题。
    • 什么意思,明明是专栏!是一种无法一一相加的大矩阵的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 2018-11-19
    • 2014-05-20
    相关资源
    最近更新 更多