2016-11-07 107 views
0

一个numpy的阵列我有一个numpy的阵列,“nFuncs”包含函数对象作为打击:索引包含功能

array([ [<bound method ncNN.sigmoid of <__main__.ncNN object at 0x11c01f510>>, 
     <bound method ncNN.sigmoid of <__main__.ncNN object at 0x11c01f510>>, 
     <bound method ncNN.sigmoid of <__main__.ncNN object at 0x11c01f510>>], 
     [<bound method ncNN.sigmoid of <__main__.ncNN object at 0x11c01f510>>, 
     <bound method ncNN.sigmoid of <__main__.ncNN object at 0x11c01f510>>]], dtype=object) 

什么是指数这个数组的合法的途径? 当我尝试nFuncs [1,1]时,我有IndexError:数组索引太多。但是,nFuncs [1] [1]的作品。你能解释为什么我不能使用nFuncs [1,1]?

+2

它可以存储为列表的列表。 你有没有试过'type(nFuncs [1])'? – DeanLa

+0

什么是“形状”? – hpaulj

+0

@hpaulj它是(2,) – noclew

回答

1

做一个嵌套列表:

In [8]: alist=[[1,2,3],[4,5]] 
In [9]: len(alist) 
Out[9]: 2 

这2项的列表;这些项目恰好是列表。在某些元视图中它是2d,但列表本身没有任何关于2d的内容。

使从它的数组:

In [10]: arr = np.array(alist) 
In [11]: arr.shape 
Out[11]: (2,) 
In [12]: arr.dtype 
Out[12]: dtype('O') 
In [13]: arr 
Out[13]: array([[1, 2, 3], [4, 5]], dtype=object) 
In [14]: arr[0] 
Out[14]: [1, 2, 3] 
In [15]: type(arr[0]) 
Out[15]: list 

它也有2个元素,实际上相同的2子列表作为alist(相同的id)

In [16]: id(alist[0]) 
Out[16]: 2992863468 
In [17]: id(arr[0]) 
Out[17]: 2992863468 

如果我改变中的一个的元件那些子列表中,变化出现在其他结构中

In [18]: arr[0][1]=3 
In [19]: arr 
Out[19]: array([[1, 3, 3], [4, 5]], dtype=object) 
In [20]: alist 
Out[20]: [[1, 3, 3], [4, 5]] 

对于大多数用途来说,一个对象数组lik这就像一个列表。你可以重塑它,例如。 `arr.reshape(2,1)',但你不能追加到它。要执行大多数操作(或numpy)必须遍历元素,就像它是一个列表一样。

对比度与整数的2D阵列

In [21]: A=np.array([[1,2,3],[4,5,6]]) 
In [22]: A 
Out[22]: 
array([[1, 2, 3], 
     [4, 5, 6]]) 
In [23]: A.shape 
Out[23]: (2, 3) 
In [24]: A.dtype 
Out[24]: dtype('int32') 

可能它会以显现object屏障如果我改变的arr元件成阵列:

In [26]: arr[0]=np.array(arr[0]) 
In [27]: arr[1]=np.array(arr[1]) 
In [28]: arr 
Out[28]: array([array([1, 3, 3]), array([4, 5])], dtype=object) 

它现在是一个数组阵列;但仍然不像2d数组一样。

+0

我真的很感谢你的亲切解释。现在我想我已经开始理解对象数组和其他一些数组类型(?)之间的区别。还有几个问题。什么时候启动一个数组作为对象数组和固定类型的数组?例如,'A = np.array([['1','1'],['sd','a']])'使得“| S2'”类型(?)2D数组,而不是对象阵列。那么,我是否可以这样认为,如果我使用具有相同长度的子元素创建一个数组,它将始终创建一个固定类型的多维数组?另外,你能解释一下高维数组中A [x,x]索引背后的基本原理吗? – noclew

+0

'np.array'尝试尽可能创建一个高维数组 - 通过等长嵌套数组一直向下工作。限制该深度需要一些技巧。这是许多SO问题的主题。 – hpaulj

+0

非常感谢。我会研究更多的文件 – noclew

1

数组有形状(2,):它是一维的。这是因为构造函数中的第一个和第二个子列表具有不同的长度。所以这被解释为2个列表的一维数组。要获得一组函数,请在第二个列表中插入一个函数(或从第一个列表中删除一个函数)。

+0

感谢您的输入。那么,如果我只是想像上面那样使用这个数组,它是唯一能像名字[I] [j]一样索引的方法吗? – noclew

+0

在任何情况下,您必须首先将数组索引到结果列表中。原则上有更复杂的方式来索引数组,但我认为这对你的情况不会有帮助。 – hvwaldow

+0

然后,numpy数组像a = np.array([[1,2,3],[4,5,6]])是一个例外,因为我可以使用[1,2]来访问元素吗? – noclew