<分区>
如果您不知道数组的形状,是否有一种简单的方法可以提取 ndarray 的第一项?
例如。给定以下数组:
arr = np.array([[[1,2,3,4], [5,6,7,8], [9,10,11,12]]])
>>> [[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]]
我想得到 1
而不假设我知道这个数组的形状是 1*3*4。
我也对最小化解决方案的内存和 CPU 要求感兴趣。
<分区>
如果您不知道数组的形状,是否有一种简单的方法可以提取 ndarray 的第一项?
例如。给定以下数组:
arr = np.array([[[1,2,3,4], [5,6,7,8], [9,10,11,12]]])
>>> [[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]]
我想得到 1
而不假设我知道这个数组的形状是 1*3*4。
我也对最小化解决方案的内存和 CPU 要求感兴趣。
最佳答案
您可以使用 .ravel()
获得 ndarray 的平面 View ,然后使用 [0]
将其链接以提取第一个元素,就像这样 -
arr.ravel()[0]
请注意.flatten()
会创建一个副本,所以就内存而言可能不是一个好主意,即使它仍然会给你正确的结果。
检查操作是否正在创建copy
或view
的一种方法是使用np.may_share_memory
检查内存共享标志。 , 像这样 -
In [15]: np.may_share_memory(arr.flatten(),arr)
Out[15]: False # Not sharing memory means a copy
In [16]: np.may_share_memory(arr.ravel(),arr)
Out[16]: True # Sharing memory means a view
看来,也可以用.flat
获取 View 。
似乎在 np.take
中有一个优雅的替代方案-
np.take(arr,0) # Input array is arr, 0 is the index position
关于python - 查找未知形状的 numpy ndarray 的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35022569/