我正在尝试根据用户的决定来操纵N维数组的值,在哪个索引处应该更改数组。这个例子工作正常:
import numpy as np
a = np.arange(24).reshape(2,3,4)
toChange = ['0', '0', '0'] #input from user via raw_input
a[toChange] = 0
但如果我想改变一个位置而不是一个完整的行,我会遇到问题:
toChange = ['0', '0', ':'] #input from user via raw_input
a[toChange] = 0
这导致ValueError: setting an array element with a sequence
。
我可以看到问题是':'字符串,因为a[0, 0, :] = 0
完全符合我的要求。问题是,如何将字符串传递给数组?
或者是否有更智能的方法来操纵用户定义的切片?
PS:因为我正在使用oldstable Debian,所以我使用的是Python 2.6.6和Numpy 1.4.1
答案 0 :(得分:1)
:
是slice
对象的语法糖:
>>> class Indexable(object):
... def __getitem__(self, idx):
... return idx
...
>>> Indexable()[0, 0, :]
(0, 0, slice(None, None, None))
因此,如果您将':'
替换为slice(None, None, None)
,您将获得所需的结果:
>>> toChange = [0, 0, slice(None, None, None)]
>>> a[toChange] = 0
>>> a
array([[[ 0, 0, 0, 0],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])