您能否帮助您理解本机int类型与numpy.int32或numpy.int64类型之间的主要区别(如果有)?
观察差异的另一种方法是询问两种对象有什么方法。
在Ipython中,我可以使用tab complete来查看方法:
In [1277]: x=123; y=np.int32(123)
int 方法和属性:
int
In [1278]: x.<tab> x.bit_length x.denominator x.imag x.numerator x.to_bytes x.conjugate x.from_bytes x.real
int “经营者”
In [1278]: x.__<tab> x.__abs__ x.__init__ x.__rlshift__ x.__add__ x.__int__ x.__rmod__ x.__and__ x.__invert__ x.__rmul__ x.__bool__ x.__le__ x.__ror__ ... x.__gt__ x.__reduce_ex__ x.__xor__ x.__hash__ x.__repr__ x.__index__ x.__rfloordiv__
np.int32方法和属性(或属性)。一些相同,但更多的是,基本上所有ndarray的:
np.int32
ndarray
In [1278]: y.<tab> y.T y.denominator y.ndim y.size y.all y.diagonal y.newbyteorder y.sort y.any y.dtype y.nonzero y.squeeze ... y.cumsum y.min y.setflags y.data y.nbytes y.shape
该y.__方法看起来很像int的。他们可以做同样的数学。
y.__
In [1278]: y.__<tab> y.__abs__ y.__getitem__ y.__reduce_ex__ y.__add__ y.__gt__ y.__repr__ ... y.__format__ y.__rand__ y.__subclasshook__ y.__ge__ y.__rdivmod__ y.__truediv__ y.__getattribute__ y.__reduce__ y.__xor__
y在很多方面与0d数组相同。不相同,但接近。
y
In [1281]: z=np.array(123,dtype=np.int32)
np.int32 当我索引该类型的数组时得到的是:
In [1300]: A=np.array([0,123,3]) In [1301]: A[1] Out[1301]: 123 In [1302]: type(A[1]) Out[1302]: numpy.int32
我必须使用item删除所有numpy包装。
item
numpy
In [1303]: type(A[1].item()) Out[1303]: int
作为numpy用户,annp.int32是int带有numpy包装的。或相反的单个元素ndarray。通常,我不关心A[0]是给我“本机”int还是给我numpy等价物。与一些新用户相反,我很少使用np.int32(123); 我会np.array(123)改用。
A[0]
np.int32(123)
np.array(123)
A = np.array([1,123,0], np.int32)
不包含3个np.int32对象。而是其数据缓冲区为3 * 4 = 12字节长。正是数组开销将其在一维中解释为3个整数。并view显示我不同的解释相同的DataBuffer:
view
In [1307]: A.view(np.int16) Out[1307]: array([ 1, 0, 123, 0, 0, 0], dtype=int16) In [1310]: A.view('S4') Out[1310]: array([b'\x01', b'{', b''], dtype='|S4')
只有当我为单个元素建立索引时,我才能获得np.int32对象。
列表L=[1, 123, 0]不一样;它是一个指针列表-指向int内存中其他对象的指针。类似地,对于dtype = object数组。
L=[1, 123, 0]