3
NumPy的的string
D型細胞似乎對應於Python的str
並因此的Python 2.x和3.x之間改變:ASCII字符串作爲D型爲字符串在Python numpy的陣列3
在Python 2.7:
In [1]: import numpy as np
In [2]: np.dtype((np.str_, 1)).itemsize
Out[2]: 1
In [3]: np.dtype((np.unicode_, 1)).itemsize
Out[3]: 4
在Python 3.3:
In [2]: np.dtype((np.str_, 1)).itemsize
Out[2]: 4
與NumPy的版本是在兩種情況下1.7.0。
我正在寫一些代碼,我想在兩個Python版本上工作,並且我想要一個ASCII字符串數組(4x內存開銷是不可接受的)。所以問題是:
- 如何在Python 3中爲特定長度的ASCII字符串(每字符1個字節)定義dtype?
- 我該如何在Python 2中使用它?
- 獎勵問題:我能否進一步限制字母,例如:到
ascii_uppercase
,並保存一個或兩個字符?
我認爲可能的答案是第一個問題的字符數組(即有一個字符數組數組而不是字符串數組)的字符數組。好像構建一個時,我可以指定項目大小:
chararray(shape, itemsize=1, unicode=False, buffer=None, offset=0,
strides=None, order=None)
更新:羅時,itemsize
實際上是字符數。但仍然有unicode=False
。
這就是要走的路嗎?
它會回答最後一個問題嗎?
我該如何將它作爲dtype
?
我很確定回答你最後的問題是一個很大的問題。 AFAIK,而且我在一段時間以後再研究它,沒有辦法將小於8位的數據打包成小於1個字節。絕對不適用於6或7位類型,但除非您自己處理,否則在一個8位容器中不能有2個四位值。即使是'bool'數組,它們存儲的每個「True」/「False」值都會佔用全部8位。 – Jaime 2013-03-04 08:30:18
@Jaime哇,好吧。然後我想要1個字節:) – 2013-03-04 08:53:14