使用尺寸 Python

Use size in Python

我在 python

中创建了一个 ndarray 数组
temp = np.array([1, 2, 3, 4])

要测量这个数组的长度,我可以使用

temp.size

np.size(temp)

both return 4. 但是我想知道这两个表达式有什么区别?另外,要获取 lena 图像,我需要写

>>> import scipy.misc
>>> lena = scipy.misc.lena()

我想知道为什么在 lena 后面有一对括号? lena不是矩阵吗?带有 () 的东西就像一个函数。我知道 lena() 是一个不需要输入的函数,return 是一个 ndarray。就是觉得这么写好无聊

在Matlab中,常量和函数的区别是很清楚的。函数是用()定义和调用的,但是可以直接调用常量(或预存),例如"blobs.png"

temp.size 是一个 属性 numpy.ndarray.size of ndarray where as numpy.size 是一个自由函数,它调用 ndarray 的大小 属性 或具有 size方法。

numpy.size 之所以灵活,是因为它可以作用于 ndarray 之类的对象或可以转换为 ndarray

的对象

numpy.size 也排除了可选的 axis,它将计算大小。

这里是 numpy.array 的 implementation

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]

np.size(temp)temp.size 更通用一点。乍一看,他们似乎在做同样的事情:

>>> x = np.array([[1,2,3],[4,5,6]])
>>> x.size
6
>>> np.size(x)
6

当您不向 np.size 提供任何附加参数时,情况就是如此。但是,如果您查看 np.sizedocumentation,您会发现它接受一个额外的 axis 参数,该参数给出了沿相应轴的大小:

>>> np.size(x, 0)
2
>>> np.size(x, 1)
3

就您的第二个问题而言,scipy.misc.lena 是您指出的一个函数。它不是矩阵。它是一个返回矩阵的函数。该函数(大概)会动态加载数据,以便在您导入 scipy.misc 模块时不会将其放入内存中。这是一件很好的事情,实际上与 matlab 并没有什么不同。