我有一個數字串列
a = [1, 2, 3, 4, 5]
和一個存在的陣列
b = [[np.nan, 10, np.nan],
[11, 12, 13],
[np.nan, 14, np.nan]]
如何將“串列a”中的數字放置到b包含我應該得到的數字的陣列中的元素
c = [[np.nan, 1, np.nan],
[2, 3, 4],
[np.nan, 5, np.nan]]
也許它可以用回圈來完成,但我想避免它,因為串列的長度和陣列的維度會改變。但是,串列的長度將始終與不在np.nan陣列中的元素的數量相匹配。
uj5u.com熱心網友回復:
這是一種無需使用回圈即可解決此問題的方法。
首先,我們展平陣列 b 以將其轉換為一維陣列,然后用 a 的內容替換 none nan 值。然后,將陣列轉換回其初始形狀。
flat_b = b.flatten()
flat_b[~np.isnan(flat_b)] = a
flat_b.reshape(b.shape)
uj5u.com熱心網友回復:
您可以np.isnan創建一個布爾掩碼。然后在索引1 中使用它。
m = np.isnan(b)
b[~m] = a
print(b)
[[nan 1. nan]
[ 2. 3. 4.]
[nan 5. nan]]
1. NumPy 的布爾索引
uj5u.com熱心網友回復:
c = b
current = 0
for i in range(len(c)):
for j in range(len(c[i])):
if c[i][j] != np.nan and current < len(a):
c[i][j] = a[current]
current = 1
雖然這看起來很長很復雜,但它實際上只有 O(n) 復雜度。它只是遍歷 2D 陣列并將非 nan 值替換為 中的當前值a。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/372355.html
上一篇:用于雙重拍賣的陣列中的快速匹配
