Reputation: 83
I created a ndarray array in python
temp = np.array([1, 2, 3, 4])
To measure the length of this array, I can use
temp.size
or
np.size(temp)
both return 4. But I'm wondering what's the difference between the two expressions? Also, to get the lena image, I need to write
>>> import scipy.misc
>>> lena = scipy.misc.lena()
I'm wondering why there's a bracket pair after lena? Isn't lena a matrix? Something with () is like a function. I understand lena() is a function takes no inputs and returns a ndarray. I just feel like it's tedious to write this way.
In Matlab, it's quite clear to distinguish between a constant and a function. Function is defined and called with (), but constant (or pre-stored) can be called directly, e.g., "blobs.png"
Upvotes: 2
Views: 17587
Reputation: 20695
np.size(temp)
is a little more general than temp.size
. At first glance, they appear to do the same thing:
>>> x = np.array([[1,2,3],[4,5,6]])
>>> x.size
6
>>> np.size(x)
6
This is true when you don't supply any additional arguments to np.size
. But if you look at the documentation for np.size
, you'll see that it accepts an additional axis
parameter, which gives the size along the corresponding axis:
>>> np.size(x, 0)
2
>>> np.size(x, 1)
3
As far as your second question, scipy.misc.lena
is a function as you point out. It is not a matrix. It is a function returning a matrix. The function (presumably) loads the data on the fly so that it isn't placed in memory whenever you import the scipy.misc
module. This is a good thing, and actually not all that different than matlab.
Upvotes: 4
Reputation: 63727
temp.size
is a property numpy.ndarray.size of ndarray
where as numpy.size is a free function which calls the size property of ndarray
or any other similar object which has the size
method.
The reason numpy.size
is flexible because it can act upon ndarray
like object or objects that can be converted to ndarray
numpy.size
also excepts an optional axis
, along which it would calculate the size.
Here is the implementation of numpy.array.
def size(a, axis=None):
if axis is None:
try:
return a.size
except AttributeError:
return asarray(a).size
else:
try:
return a.shape[axis]
except AttributeError:
return asarray(a).shape[axis]
Upvotes: 2