如何在没有循环的特定位置修改二维数字数组?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

我有一个2D的numpy数组,还有一个行和列的数组,应该设置为一个特定的值。让我们考虑以下示例

 a = array([[1, 2, 3],
            [4, 5, 6],
            [7, 8, 9]])

我想修改行中的条目0,2和列1,2这将导致以下数组

 a = array([[1, 2, 0],
           [4, 5, 0],
           [7, 8, 9]])

我做了下面的工作,结果修改了每一行的每一个列的序列。

rows = [0,1]
cols = [2,2]
b=a[numpy.ix_(rows,columns)]

它导致以下数组修改指定数组的每一列

array([[1, 0, 0],
       [4, 5, 6],
       [7, 0, 0]])

怎么实现?

提问于
用户回答回答于

除了其他人所说的之外,您还可以使用花式索引来修改这些元素,如下所示:

In [39]: rows = [0,1]

In [40]: cols = [2,2]

In [41]: a = np.arange(1,10).reshape((3,3))

In [42]: a[rows,cols] = 0

In [43]: a
Out[43]: 
array([[1, 2, 0],
       [4, 5, 0],
       [7, 8, 9]])

重要的是,这也允许您做以下事情:

In [60]: a[rows,cols] = np.array([33,77])

In [61]: a
Out[61]: 
array([[ 1,  2, 33],
       [ 4,  5, 77],
       [ 7,  8,  9]])

可以使用相同大小的另一个数组、列表或元组独立设置每个元素。

用户回答回答于

为了得到“正确”的数组,您可以这样做:

a[:2, 2] = 0

若要修改四行的五列,(行),0,2和列1,2)你会做你正在做的事情...(你对修改行的描述0,2和列1,2就是你得到的结果,对吗?)

扫码关注云+社区