Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将列表作为N维numpy数组的切片传递_Python_Numpy_Slice_Multidimensional Array - Fatal编程技术网

Python 将列表作为N维numpy数组的切片传递

Python 将列表作为N维numpy数组的切片传递,python,numpy,slice,multidimensional-array,Python,Numpy,Slice,Multidimensional Array,我试图根据用户的决定操纵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

我试图根据用户的决定操纵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:使用序列设置数组元素
。
我可以看出问题出在“:”字符串上,因为
a[0,0,:]=0
正是我想要的。问题是,如何将字符串传递给数组

或者有没有更聪明的方法来操作用户定义的切片


PS:当我在使用一个oldstable Debian时,我使用Python 2.6.6和Numpy 1.4.1

切片
对象的语法糖:

>>> class Indexable(object):
...     def __getitem__(self, idx):
...         return idx
...     
>>> Indexable()[0, 0, :]
(0, 0, slice(None, None, None))
因此,如果用
切片(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]]])

感谢您的快速回复!这在交互模式下工作得很好,但在我的脚本中,不知何故我遇到了一个新错误:
toChange=[0,0,slice(None,None,None)]TypeError:“numpy.ndarray”对象不可调用
是否有可能将
toChange
视为数组?最好使用元组进行索引。列表/序列的使用依赖于不稳定的逻辑,我个人更倾向于禁止它。好吧,我遇到了问题:切片不起作用,因为在操作数组之前,我将整个数组写入一个文件,使用open(“out/histData.txt”,“w”)作为数据文件:对于histData中的切片:np.savetxt(dataFile,slice,fmt=“%.2f”,delimiter=“\t”)
因此
slice
是一个数组,整个过程都不起作用。业余时间:-)@seberg:这个解决方案是什么样子的?@Gnihilo,完全一样,只要确保最后的toChange是一个元组(如果列表需要可变性,只需调用
tuple(toChange)