该文档说明了标量的用途,例如,传统的Python数字(例如float和integer)太原始了,因此需要更复杂的数据类型。
它还说明某些标量(数据类型层次结构);以及标量的几个属性。 但是它从来没有给出确切的定义,确切说明了在Python上下文中标量是什么。
我想对此深究。所以我的问题是,以最简单的方式向我解释什么是pythonic标量。
甲NumPy的标量是任何对象,它是一个实例np.generic或其type是np.ScalarType:
np.generic
type
np.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
>>> 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.ScalarType和np.isscalar。打字
np
"scalar"
In [20]: np.isscalar?
(注意最后的问号)提示IPython向您显示np.isscalar定义的位置:
File: /data1/unutbu/.virtualenvs/dev/lib/python2.7/site-packages/numpy/core/numeric.py
这就是我对的定义的方式isscalar。另外,numpy文档isscalar也有指向源代码的链接。
isscalar