索引包含函数的numpy数组

时间:2016-11-07 21:31:16

标签: python 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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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个元素,实际上与alist相同的2个子列表(相同的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]]

对于大多数用途,像这样的对象数组就像一个列表。你可以重塑它,例如。 `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阵列不同。