Use Size in Python

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"

2 Answers

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.

2

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]

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Robert Thorne
Author

Robert Thorne

Robert Thorne covers electric vehicle innovations, autonomous driving systems, global mobility trends, and automotive engineering developments.