Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么在numpy数组中使用前导空格打印True_Python_Arrays_Numpy_Whitespace - Fatal编程技术网

Python 为什么在numpy数组中使用前导空格打印True

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) >>> # ^ ^ ^ ... #

我注意到在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)
>>> #  ^             ^      ^
... # 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是的,我把这个奇怪的案例放在第一位,我重新组织了。不过我不确定我现在有什么要改变的:)谢谢你的意见。