天天看點

python random 和numpyr andint_原生int類型和numpy.int類型有什麼差別?

另一種看待差異的方法是詢問這兩種對象有什麼方法。

在Ipython中,我可以使用tab complete檢視方法:In [1277]: x=123; y=np.int32(123)

int方法和屬性:In [1278]: x.

x.bit_length x.denominator x.imag x.numerator x.to_bytes

x.conjugate x.from_bytes x.real

int“運算符”In [1278]: x.__

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方法和屬性(或屬性)。有些是相同的,但更多的是,基本上所有的:In [1278]: y.

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.__

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使用者,np.int32是具有numpy包裝的int。或者相反地,一個ndarray的單一進制素。通常,我不注意A[0]是給我“原生的”int還是numpy等價物。與一些新使用者不同的是,我很少使用np.int32(123);而是使用np.array(123)。A = np.array([1,123,0], np.int32)

不包含3np.int32對象。相反,它的資料緩沖區是3*4=12位元組長。是數組開銷将其解釋為1d中的3個整數。并且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數組也是如此。