问题描述
甲NumPy的标量是任何对象,它是一个实例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(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
。打字
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标量。