簡體   English   中英

dtype = object在創建numpy數組時意味着什么?

[英]What does dtype=object mean while creating a numpy array?

我正在嘗試使用numpy數組並創建了一個numpy字符串數組:

ar1 = np.array(['avinash', 'jay'])

正如我從其官方指南中讀到的那樣,numpy數組上的操作會傳播到單個元素。 所以我這樣做了:

ar1 * 2

但后來我得到了這個錯誤:

TypeError                                 Traceback (most recent call last)
<ipython-input-22-aaac6331c572> in <module>()
----> 1 ar1 * 2

TypeError: unsupported operand type(s) for *: 'numpy.ndarray' and 'int'

但是當我使用dtype=object

ar1 = np.array(['avinash', 'jay'], dtype=object)

在創建數組時,我能夠完成所有操作。

誰能告訴我為什么會這樣?

NumPy數組存儲為連續的內存塊。 它們通常具有單個數據類型(例如整數,浮點數或固定長度字符串),然后內存中的位被解釋為具有該數據類型的值。

使用dtype=object創建數組是不同的。 現在,數組占用的內存中填充了Python對象的指針 ,這些對象存儲在內存中的其他地方 (就像Python list實際上只是指向對象的指針列表,而不是對象本身)。

諸如*算術運算符不適用於具有string_數據類型的ar1等數組(而是有特殊函數 - 見下文)。 NumPy只是將內存中的位視為字符,而*運算符在這里沒有意義。 但是,行

np.array(['avinash','jay'], dtype=object) * 2

因為現在數組是一個(指向)Python字符串的數組。 *運算符是為這些Python字符串對象定義的。 在內存中創建新的Python字符串,並返回一個引用新字符串的新object數組。


如果你有一個帶有string_unicode_的數組並想重復每個字符串,你可以使用np.char.multiply

In [52]: np.char.multiply(ar1, 2)
Out[52]: array(['avinashavinash', 'jayjay'], 
      dtype='<U14')

NumPy還有許多其他矢量化字符串方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM