2014-02-24 26 views
1

我收到了一個floats的數組,我想將其轉換爲int再次對Numpy數組進行就地類型轉換?

a1 = np.ones(10) 
a2 = a1.astype(int, copy=False) 
a2.dtype # int 
a1.dtype # float 

這是怎麼回事?我認爲astype(int, copy=False)會在地方施放類型。但它似乎並沒有這樣做?

相關的問題:In-place type conversion of a NumPy array

+0

我認爲這可能是由於純python'int'和'np.float64'之間的大小差異造成的,但我嘗試過'np.int64',但它也不起作用。 – wim

+0

開始閱讀這裏:https://github.com/numpy/numpy/blob/master/numpy/core/src/multiarray/methods.c#L784 – wim

回答

2

copy argument documentation

如果設置爲false,和D型,順序和subok要求 得到滿足,則返回而不是輸入數組複製。

它實際上不能實際轉換類型。它只適用於輸入數組已經是你想要的dtype的情況;否則,無論如何它必須複製一份。

+0

我認爲這似乎是正確的,但什麼'astype'可以改變,如果不是'dtype'? – wim

+0

@wim:如果原始文件看起來完全符合您的要求,它只能避免創建新的數組。在創建新數組時,它可以更改dtype,內存順序和特定的數組子類。 – user2357112

+0

這只是一種避免不必要副本的方法,如果您有一個未知類型的數組對象並且必須將其轉換爲特定的類型。這可能不是經常需要使用Python中的numpy所需的,無論類型如何,您都可以使用相同的操作來工作,但在numpy的C內部中,您始終可以看到這一點。 – Jaime

相關問題