我有兩個看起來像的 numpy 陣列
a = np.array([[1,2], [3,4], [5,6], [7,8]])
b = np.array([[1,2], [3,3], [5,6], [8,7]])
我想過濾到陣列 a 中的行,而不是陣列 b 中的行。所以我的輸出應該是這樣的:
in_a_and_not_b = np.array([[3,4], [7,8]])
我現在有一些討厭的代碼來執行此操作:
in_a_and_not_b = []
current_row = 0
for row_a in a:
include_current_row = True
for row_b in b:
if np.array_equal(row_a, row_b):
include_current_row = False
if include_current_row:
in_a_and_not_b.append(a[current_row])
current_row = 1
我的問題是這需要永遠。有沒有更簡單的方法來做到這一點,這將花費更少的時間?
實際上,我的陣列 a 和 b 很大,每個形狀都在 (50000, 2) 左右。
uj5u.com熱心網友回復:
如果將陣列轉換為,list of tuples則可以set(tuples_a) - set(tuples_b)
最小的作業示例
import numpy as np
a = np.array([[1,2], [3,4], [5,6], [7,8]])
b = np.array([[1,2], [3,3], [5,6], [8,7]])
tuples_a = [tuple(x) for x in a.tolist()]
tuples_b = [tuple(x) for x in b.tolist()]
print( set(tuples_a) - set(tuples_b) )
結果:
{(3, 4), (7, 8)}
接下來您可以將其轉換為 numpy.array。
但是,如果您需要保持秩序,那么它可能會出現問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/511898.html
標籤:Python数组麻木的
下一篇:如何加快拆分一列以創建新列?
