小编典典

本机int类型和numpy.int类型之间有什么区别?

python

您能否帮助您理解本机int类型与numpy.int32或numpy.int64类型之间的主要区别(如果有)?


阅读 225

收藏
2020-12-20

共1个答案

小编典典

观察差异的另一种方法是询问两种对象有什么方法。

在Ipython中,我可以使用tab complete来查看方法:

In [1277]: x=123; y=np.int32(123)

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的:

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的。他们可以做同样的数学。

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数组相同。不相同,但接近。

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包装。

In [1303]: type(A[1].item())
Out[1303]: int

作为numpy用户,annp.int32int带有numpy包装的。或相反的单个元素ndarray。通常,我不关心A[0]是给我“本机”int还是给我numpy等价物。与一些新用户相反,我很少使用np.int32(123);
我会np.array(123)改用。

A = np.array([1,123,0], np.int32)

不包含3个np.int32对象。而是其数据缓冲区为3 * 4 =
12字节长。正是数组开销将其在一维中解释为3个整数。并view显示我不同的解释相同的DataBuffer:

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数组。

2020-12-20