我有一个二维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]])
有人能告诉我怎么做吗?
非常感谢
编辑:需要注意的是,行和列恰好是序列。实际的要点是,这些可以是任意的,可以是任何顺序的。如果它是rows = a,b,c和cols=n x z,那么我想修改位置(a,n),(b,x),(c,z)的三个元素。
发布于 2011-10-14 08:00:52
除了其他人所说的之外,您还可以使用花哨的索引修改这些元素,如下所示:
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
关键点是:
如果索引数组具有匹配的形状,并且被索引数组的每个维度都有一个索引数组,则结果数组具有与索引数组相同的形状,并且值对应于索引数组中每个位置的索引集。
重要的是,这还允许您执行以下操作:
In [60]: a[rows,cols] = np.array([33,77])
In [61]: a
Out[61]:
array([[ 1, 2, 33],
[ 4, 5, 77],
[ 7, 8, 9]])
其中,您可以使用相同大小的另一个数组、列表或元组单独设置每个元素。
发布于 2017-11-04 00:46:35
一种解决方法:ndarray.flatten, np.put(), ndarray.reshape
尝试使用ndarray.flatten(array)
,这样您就可以处理一个可以用numpy.put(array,[indices],[values])
操作的一维数组。然后使用ndarray.reshape()
获取原始尺寸。
发布于 2011-10-14 07:14:28
首先,您对“正确”数组的描述与您指定的列和行不匹配...
为了得到“正确”的数组,你可以这样做:
a[:2, 2] = 0
要修改第一行和第三行的第二列和第三列(第0,2行和第1,2列),您需要执行以下操作...(您对修改第0,2行和第1,2列的描述就是您得到的结果,对吧?)
https://stackoverflow.com/questions/7761393
复制相似问题