使用函数将包含函数的numpy数组进行索引

2024-06-09 13:45:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Numpy数组,“nFuncs”包含函数对象作为blow:

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]吗?你知道吗


Tags: of对象函数numpyobjectmain数组array
2条回答

数组具有形状(2,):它是一维的。这是因为构造函数中的第一个子列表和第二个子列表的长度不同。所以这是一个由两个列表组成的一维数组。若要获取函数数组,请在第二个列表中插入一个函数(或从第一个列表中删除一个)。你知道吗

创建嵌套列表:

In [8]: alist=[[1,2,3],[4,5]]
In [9]: len(alist)
Out[9]: 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(相同id)相同的2个子列表

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]]

在大多数情况下,像这样的对象数组就像一个列表。你可以重塑它`排列重塑(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')

如果我将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)

它现在是一个数组;但这仍然与二维数组不同。你知道吗

相关问题 更多 >