[英]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.