Is there an easy way to pull out the first item of an ndarray if you don't know the shape of the array?
For example. Given the following array:
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]]]
I want to get 1
without assuming I know the shape of this array is 1*3*4.
I am also interested in minimizing the memory and cpu requirements of the solution.
You can use .ravel()
to get a flattened view of the ndarray and then chain it with [0]
to extract the first element, like so -
arr.ravel()[0]
Please note that .flatten()
would create a copy, so in terms of memory might not be a great idea, even though it would still give you the right result.
One way to check whether an operation is creating a copy
or view
is by checking for memory sharing flag with np.may_share_memory
, like so -
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
It seems, one can also use .flat
to get a view.
Seems there is an elegant alternative in np.take
-
np.take(arr,0) # Input array is arr, 0 is the index position
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With