首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在没有循环的情况下修改特定位置的二维numpy数组?

如何在没有循环的情况下修改特定位置的二维numpy数组?
EN

Stack Overflow用户
提问于 2011-10-14 06:59:11
回答 4查看 60.8K关注 0票数 33

我有一个二维numpy数组,我有一个应该设置为特定值的行和列的数组。让我们考虑一下下面的例子

代码语言:javascript
复制
 a = array([[1, 2, 3],
            [4, 5, 6],
            [7, 8, 9]])

我想修改第0,2行和第1,2列的条目。

代码语言:javascript
复制
 a = array([[1, 2, 0],
           [4, 5, 0],
           [7, 8, 9]])

我执行了以下操作,结果是修改了每一行中的每一列序列

代码语言:javascript
复制
rows = [0,1]
cols = [2,2]
b=a[numpy.ix_(rows,columns)]

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

代码语言:javascript
复制
array([[1, 0, 0],
       [4, 5, 6],
       [7, 0, 0]])

有人能告诉我怎么做吗?

非常感谢

编辑:需要注意的是,行和列恰好是序列。实际的要点是,这些可以是任意的,可以是任何顺序的。如果它是rows = a,b,c和cols=n x z,那么我想修改位置(a,n),(b,x),(c,z)的三个元素。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-14 08:00:52

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

代码语言:javascript
复制
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]])

您可能想要阅读有关索引多维数组的文档:http://docs.scipy.org/doc/numpy/user/basics.indexing.html#indexing-multi-dimensional-arrays

关键点是:

如果索引数组具有匹配的形状,并且被索引数组的每个维度都有一个索引数组,则结果数组具有与索引数组相同的形状,并且值对应于索引数组中每个位置的索引集。

重要的是,这还允许您执行以下操作:

代码语言:javascript
复制
In [60]: a[rows,cols] = np.array([33,77])

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

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

票数 29
EN

Stack Overflow用户

发布于 2017-11-04 00:46:35

一种解决方法:ndarray.flatten, np.put(), ndarray.reshape

尝试使用ndarray.flatten(array),这样您就可以处理一个可以用numpy.put(array,[indices],[values])操作的一维数组。然后使用ndarray.reshape()获取原始尺寸。

票数 3
EN

Stack Overflow用户

发布于 2011-10-14 07:14:28

首先,您对“正确”数组的描述与您指定的列和行不匹配...

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

代码语言:javascript
复制
a[:2, 2] = 0

要修改第一行和第三行的第二列和第三列(第0,2行和第1,2列),您需要执行以下操作...(您对修改第0,2行和第1,2列的描述就是您得到的结果,对吧?)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7761393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档