Python 为什么在numpy数组中使用前导空格打印True
我注意到在NumPy 1.13.1中,当打印Python 为什么在numpy数组中使用前导空格打印True,python,arrays,numpy,whitespace,Python,Arrays,Numpy,Whitespace,我注意到在NumPy 1.13.1中,当打印dtype=np.bool\ucode>数组时,True值总是有一个前导空格 >>> import numpy as np >>> np.asarray([1, 0, 1, 1, 0], dtype=np.bool_) array([ True, False, True, True, False], dtype=bool) >>> # ^ ^ ^ ... #
dtype=np.bool\ucode>数组时,True
值总是有一个前导空格
>>> import numpy as np
>>> np.asarray([1, 0, 1, 1, 0], dtype=np.bool_)
array([ True, False, True, True, False], dtype=bool)
>>> # ^ ^ ^
... # I would have expected: array([True, False, True, True, False], dtype=bool)
...
>>> str(np.asarray([0, 1, 1, 0], dtype=np.bool_))
'[False True True False]'
>>> # ^ ^
... # Again I would have expected: '[False True True False]'
...
>>> repr(np.asarray([1, 1, 1, 0, 0], dtype=np.bool_))
'array([ True, True, True, False, False], dtype=bool)'
>>> # ^ ^ ^
... # repr() does it too.
有什么特别的原因可以这样格式化它吗?浮点数组和布尔数组会出现这种情况
- 对于具有负值的浮点数组,额外的空间可确保对齐(这对于多维数组很好),为负号留出空间
>>> np.array([-4, 1, 2, -3], dtype=np.float64).reshape(2, 2)
array([[-4., 1.],
[ 2., -3.]])
- 对于具有多个值的布尔数组,它确保了长度不同的
True
和False
之间的对齐
>>> np.array([0, 1, 1, 0], dtype=np.bool_).reshape(2, 2)
array([[False, True],
[ True, False]], dtype=bool)
当不需要时,没有特别的原因(即所有正浮点值、单元素布尔数组),在这种情况下,可以不使用它
>>> np.array([4, 1, 2, 3], dtype=np.float64).reshape(2, 2)
array([[ 4., 1.],
[ 2., 3.]])
GitHub上有一个插件,可以在不需要额外间距的情况下使打印间距更加一致,因此在即将发布的版本中可能会发生变化 大多数numpy
数组的打印都带有某种奇怪的对齐方式。尝试打印np.array([23.4,2,32.33,1,0])
您将得到array([23.4,2,32.33,1,0.])
。。。不确定你期望得到什么样的答案。还要注意的是,如果你打印np.arange(200)
,它会以一种漂亮的打印格式打印出来,看起来像一个正方形。考虑到np数组通常很大,为了保持可读性,需要进行一些并非bools特有的对齐True
与False
的宽度对齐。额外的空间可确保布尔的二维数组对齐。通常,每个元素的字段宽度相同,而不考虑值。对于布尔值,较长的值为False
,因此字段宽度为五个字符。请使用二维数组进行尝试,您会发现间距是有意义的。@WarrenWeckesser是的,正如我在回答中提到的,这就是保持对齐的地方。如果你明白的话,说“没有特别的理由”有意义吗?这仍然是一个奇怪的措辞,对我来说似乎并不矛盾,但我想这些都是主观的观点。@WarrenWeckesser Ehh是的,我把这个奇怪的案例放在第一位,我重新组织了。不过我不确定我现在有什么要改变的:)谢谢你的意见。