我有一個自定義dtype my_type的數組,我從二進制文件中成功讀取。自定義dtype在數據之後有一個標題部分。數據部分是np.int16數字,因此自定義D型看起來是這樣的:numpy自定義dtype質詢
header, imaginary, real, imaginary, real, ..., imaginary, real
現在我正在尋找使用numpy的的觀點得到的np.complex64數組一個聰明的辦法的只有數據無複製/循環等考慮以下事實:
- 頭部分應該得到某種忽略
- 糾正順序(即第一個真實的,想象的)
- 結果數組應該是complex64不復雜32!
也就是說,從定製的D型數組:
[my_type, my_type, ..., my_type]
我想獲得包含一個更大的陣列:
[complex64, complex64, ..., complex64]
是否有可能用做一氣呵成Numpy的查看?
UPDATE:
因此,解決辦法是在內存中拷貝。非常感謝下面的答案。但是由於令人討厭的標題出現在每個數據幀之前,似乎儘管在內存中進行了複製,但仍然需要在所有數據幀上進行循環。在示意性的方式,我有:
a = np.arange(10, dtype=np.float16)
skip_annoying_header = 2
r = np.zeros(a.size - skip_annoying_header, np.float16)
r[0::2], r[1::2] = a[skip_annoying_header + 1::2], a[skip_annoying_header::2]
r = r.astype(np.float32)
r = r.view(np.complex64)
,我這樣做是一個for
循環的每個數據幀,然後在for
循環結束時,我再次r
內容複製到大陣列。
這個循環可以以某種方式消除?
很難,當你在文件上談論的數據告訴,以及你已經加載的數組。在讀取數據時轉換數據一次只能從文件讀取一個「數據幀」是一回事,轉換結構化數組是另一回事。如果你已經有陣列顯示它是'dtype'和'shape'。 – hpaulj