数组的元素和索引时得到的对象是不同的。
数组有一个数据缓冲区,它是由numpy的编译代码管理的字节块。每个元素可能由1个字节、4个字节、8个字节、16个字节等表示。
In [478]: A=np.array([1,2,3])
In [479]: A.__array_interface__
Out[479]:
{'data': (167487856, False),
'descr': [('', '<i4')],
'shape': (3,),
'strides': None,
'typestr': '<i4',
'version': 3}
将数据显示为字节列表(显示为字符):
In [480]: A.view('S1')
Out[480]:
array(['\x01', '', '', '', '\x02', '', '', '', '\x03', '', '', ''],
dtype='|S1')
当你选择一个
A
元素时,会返回一个包含一个元素的数组(或类似的东西):
In [491]: b=A[0]
In [492]: b.shape
Out[492]: ()
In [493]: b.__array_interface__
Out[493]:
{'__ref': array(1),
'data': (167480104, False),
'descr': [('', '<i4')],
'shape': (),
'strides': None,
'typestr': '<i4',
'version': 3}
type
不同,但是 b
具有与 A
相同的大部分属性,例如 shape
、strides
、mean
等。
您必须使用 .item
访问基础“标量”:
In [496]: b.item()
Out[496]: 1
In [497]: type(b.item())
Out[497]: int
所以你可以将b
视为一个具有numpy
包装器的标量。对于b
的__array_interface__
看起来非常像np.array(1)
。