Python 索引包含函数的numpy数组

Python 索引包含函数的numpy数组,python,numpy,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.si

我有一个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)
数组([,,
, 
],
[,
]],dtype=object)
为这个数组编制索引的合法方法是什么? 当我尝试nFuncs[1,1]时,我遇到了Indexer错误:数组的索引太多。然而,NFUNC[1][1]是有效的。你能解释一下为什么我不能使用NFUNC[1,1]吗?

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

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

制作一个嵌套列表:

In [8]: alist=[[1,2,3],[4,5]]
In [9]: len(alist)
Out[9]: 2
这是一个由两个项目组成的列表;这些项目恰好是列表。在某种排序元视图中,它是二维的,但列表本身并不是二维的

从中创建一个数组:

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
(相同id)相同的2个子列表

如果我更改其中一个子列表中的一个元素,该更改将显示在另一个结构中

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.reforme(2,1'),但是你不能附加到它上面。要执行大多数操作,您(或numpy)必须像遍历列表一样遍历元素

将其与二维整数数组进行对比

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')
如果我将
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数组不同。

制作一个嵌套列表:

In [8]: alist=[[1,2,3],[4,5]]
In [9]: len(alist)
Out[9]: 2
这是一个由两个项目组成的列表;这些项目恰好是列表。在某种排序元视图中,它是二维的,但列表本身并不是二维的

从中创建一个数组:

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
(相同id)相同的2个子列表

如果我更改其中一个子列表中的一个元素,该更改将显示在另一个结构中

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.reforme(2,1'),但是你不能附加到它上面。要执行大多数操作,您(或numpy)必须像遍历列表一样遍历元素

将其与二维整数数组进行对比

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')
如果我将
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数组不同。

它可以存储为列表列表。你试过
类型(nFuncs[1])
?它的
形状是什么?@hpaulj它是(2,)@DeanLa是的,它是一个列表。因此它是1d,只能用
[1]
索引。它可以存储为列表列表。你试过
类型(nFuncs[1])
?它的
形状是什么?@hpaulj它是(2,)@DeanLa是的,它是一个列表。因此它是1d,只能用
[1]
索引。谢谢你的输入。那么,如果我只想像上面那样使用数组,这是索引类似name[I][j]的唯一方法吗?在任何情况下,都必须先索引到数组中,然后索引到结果列表中。原则上,有更复杂的方法来索引数组,但我认为这对您的情况没有意义或帮助。然后,Numpy数组,如a=np.array([[1,2,3],[4,5,6]])是一个例外,因为我可以使用[1,2]?更像规则,而不是例外:)来访问这样的元素,您需要一个2D数组,它不能由两个不同长度的列表构造,因此numpy不会,而是提供一个列表数组。谢谢您的输入。那么,如果我只想像上面那样使用数组,这是索引类似name[I][j]的唯一方法吗?在任何情况下,都必须先索引到数组中,然后索引到结果列表中。原则上,有更复杂的方法来索引数组,但我认为这对您的情况没有意义或帮助。然后,Numpy数组,如a=np.array([[1,2,3],[4,5,6]])是一个例外,因为我可以使用[1,2]?更像规则,而不是例外:)来访问这样的元素,您需要一个2D数组,它不能由两个不同长度的列表来构造,所以numpy不会,而是给你一个列表数组。我非常感谢你的解释。现在我想我开始理解对象数组和其他类型的数组(?)之间的区别了。还有几个问题。数组何时作为对象数组和固定类型数组启动?例如,
A=np.array([['1','1'],['sd','A']])
使“'S2'”类型(?)成为2D数组,而不是对象数组。那么,我是否可以认为,如果我创建一个具有相同长度的子元素的数组,它将始终生成一个固定类型的多维数组?另外,您能解释一下高维数组中[x,x]索引背后的原理吗?
np.数组
尝试创建尽可能高的维数组-通过等长嵌套数组一直工作。限制深度需要一些技巧。这是很多问题的主题。非常感谢。我会看更多的文件。我真的很感谢你的解释。现在我想我开始理解对象数组和其他类型的数组(?)之间的区别了。还有几个问题。数组何时作为对象数组和固定类型数组启动?例如,
A=np.array([['1','1'],['sd','A']])
使“'S2'”类型(?)成为2D数组,而不是对象数组。那么,我是否可以认为,如果我创建一个具有相同长度的子元素的数组,它将始终生成一个固定类型的多维数组?另外,你能解释一下高维数组中[x,x]索引的基本原理吗