numpy中的“标量”是什么?

问题描述

甲NumPy的标量是任何对象,它是一个实例np.generic或其typenp.ScalarType

In [12]: np.ScalarType
Out[13]: 
(int,
 float,
 complex,
 long,
 bool,
 str,
 unicode,
 buffer,
 numpy.int16,
 numpy.float16,
 numpy.int8,
 numpy.uint64,
 numpy.complex192,
 numpy.void,
 numpy.uint32,
 numpy.complex128,
 numpy.unicode_,
 numpy.uint32,
 numpy.complex64,
 numpy.string_,
 numpy.uint16,
 numpy.timedelta64,
 numpy.bool_,
 numpy.uint8,
 numpy.datetime64,
 numpy.object_,
 numpy.int64,
 numpy.float96,
 numpy.int32,
 numpy.float64,
 numpy.int32,
 numpy.float32)

这个定义来自看源代码np.isscalar

def isscalar(num):
    if isinstance(num, generic):
        return True
    else:
        return type(num) in ScalarType

请注意,您可以使用来测试某物是否为标量np.isscalar

>>> np.isscalar(3.1)
True
>>> np.isscalar([3.1])
False
>>> np.isscalar(False)
True

我喜欢学习人们如何知道他们所知道的知识,而不是回答自己。因此,让我尝试解释以上答案的来源。

拥有合适的工具可以帮助您自己解决诸如此类的问题。

我通过使用IPython发现了这一点。使用其TAB补全功能,键入

In [19]: import numpy as np
In [20]: np.[TAB]

使IPython在np模块名称空间中显示所有变量。搜索字符串"scalar"将使您进入np.ScalarTypenp.isscalar。打字

In [20]: np.isscalar?

(注意最后的问号)提示IPython向您显示np.isscalar定义的位置:

File:       /data1/unutbu/.virtualenvs/dev/lib/python2.7/site-packages/numpy/core/numeric.py

这就是我对的定义的方式isscalar。另外,numpy文档isscalar也有指向源代码链接

解决方法

该文档说明了标量的用途,例如,传统的Python数字(例如float和integer)太原始了,因此需要更复杂的数据类型。

它还说明某些标量(数据类型层次结构);以及标量的几个属性。
但是它从来没有给出确切的定义,确切说明了在Python上下文中标量是什么。

我想对此深究。所以我的问题是,以最简单的方式向我解释什么是pythonic标量。