簡體   English   中英

如何將帶有空 arrays 的 numpy arrays 列表轉換為單個數組?

[英]How to convert a list of numpy arrays with empty arrays into a single array?

所以我的數據看起來像:

[array([0], dtype=int64),
 array([1], dtype=int64),
 array([1], dtype=int64),
 array([2], dtype=int64),
 array([3], dtype=int64),
 array([3], dtype=int64),
 array([4], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([], dtype=int64),
 array([6], dtype=int64) ...

雖然使用np.concatenate(list_1)確實連接了 arrays 但跳過了空的 arrays。 結果數組 6 是 4 的下一個元素,中間的空 arrays 沒有出現在列表中。 這就是 np.concateneate 所做的,但我不希望這樣。

我想將這些 arrays 組合成一個與列表具有相同長度但NaN值代替空 arrays 的數組。 我怎樣才能做到這一點?

單程:

np.concatenate([a if a.size else np.array([np.nan]) for a in array_list])

盡管可能有更好的方法來加載您的數據,但我會冒險猜測。

作為旁注, concatenate不會跳過任何數組 - 它連接 arrays,也就是說,將每個元素一個接一個地放置。 放置 0 個元素並不明顯。

您可以預先分配 output 並直接分配給它:

result = np.full(len(list_1), np.nan)
for i, v in enumerate(list_1):
    if v.size:
        result[i] = v.item()

或者,你可以做

result = np.empty(len(list_1))
for i, v in enumerate(list_1):
    result[i] = v.item() if v.size else np.nan

暫無
暫無

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

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