Kyle
Kyle

Reputation: 83

Use size in Python

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

Answers (2)

jme
jme

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

Abhijit
Abhijit

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

Related Questions