如果您不知道数组的形状,是否有一种简单的方法可以提取 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() http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.ravel.html获得 ndarray 的扁平化视图,然后chain它与[0]
提取第一个元素,就像这样 -
arr.ravel()[0]
请注意.flatten() http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.ndarray.flatten.html会创建一个副本,因此就内存而言可能不是一个好主意,即使它仍然会给您正确的结果。
检查操作是否正在创建的一种方法copy
or view
是通过检查内存共享标志np.may_share_memory http://docs.scipy.org/doc/numpy-dev/reference/generated/numpy.may_share_memory.html,就像这样-
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 http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.ndarray.flat.html去看看。
似乎有一个优雅的选择np.take http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.take.html -
np.take(arr,0) # Input array is arr, 0 is the index position
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)