python列表可以包含不同類型的對象,例如, X = ['apples', 'oranges',10]
。如果你做type([10])
,你會看到容器的Python類型在技術上被稱爲列表,而不是數組。
相比之下,在一個numpy數組中,所有對象都是相同類型的dtype。
文檔告訴你,在創建一個numpy數組時,dtype被設置爲將保存所有現有的對象的類型。
看看,找找:
的類型將被確定爲保持序列
作家或許應該補充「,而不是它們的值中的對象所需的最小類型「
我們可以做一個UINT8 10很輕鬆地:
ten = np.uint8(10)
如果將其放入Python列表中,它將保留其類型,因爲Python列出的是保留類型。如果該列表發送到numpy.array()
以製作一個numpy數組,那麼numpy數組將使用dtype np.uint8
,因爲它足夠大以容納全部(1)預先存在的Python列表對象。
In [49]: np.array([ten]).dtype
Out[49]: dtype('uint8')
但是如果我們用一個文字10
,Python會爲它創建一個int
對象,而不是一個np.uint8
因爲np.uint8
是特有的numpy的所有10
確實是調用Python創建該號碼。
如果我們包含文字10
Python列表,我們重複你的結果(與機器架構整數):
In [50]: np.array([10]).dtype
Out[50]: dtype('int64')
如果我們把兩種一起在一個Python列表,併發送列表np.array
創建一個numpy數組,然後dtype必須足夠大,以容納這兩個對象,在這種情況下int64。
In [51]: np.array([ten, 10]).dtype
Out[51]: dtype('int64')
我爲'a.dtype'獲得'int64' – Paul
@Paul。它依賴於Python版本。 –
這有點含糊,但我認爲這裏要理解的關鍵是'最小類型'和'最小尺寸'的最小類型通常是不同的。 'np.array'給你'最小類型'。最小類型是整數,它不會給你最小的整數類型(這是完全合理的)。 – cel