大家好,請原諒我有限的編程知識。我有兩個陣列,如:numpy中不同長度數組的數組比較
A =([[ 0.10111977, 0.5511177 , 0.49532397, 0.42136468, 0.43345532],
[ 0.3812068 , 0.97679566, 0.20473656, 0.40256096, 0.32423426],
[ 0.2387294 , 0.88714084, 0.01064819, 0.48275173, 0.78234234]])
B = ([[ 0.10111977, 0.5511177 , 0.49532397],
[ 0.2387294 , 0.88714084, 0.01064819]])
(他們實際上有成千上萬的線,但只是爲了演示問題)。我想這兩個比較,以便找到其中B中的線路也存在於以相關行復制到一個新的數組,看起來像:
C =([[ 0.10111977, 0.5511177 , 0.49532397, 0.42136468, 0.43345532],
[ 0.2387294 , 0.88714084, 0.01064819, 0.48275173, 0.78234234]])
易(蠻力力)解決方案我試圖做的是這樣的:
for rowB in B:
for rowA in A:
if A[rowA,0]==B[rowB,0] and A[rowA,1]==B[rowB,1] and A[rowA,2]==B[rowB,2]:
C.extend(row)
continue
現在這將工作,但正如我所說我的數據集是巨大的,它需要永遠。 有沒有更容易\更快的方式來做到這一點?我想過插值,但我不明白這些數據如何處理。
我想說的是這樣改變你的'if'條件爲:'cmp(rowB,rowA [:3])== 0' - 這會讓閱讀更容易,但不知道是否更快。你的問題在於你對B的每一行都進行了全部的A,我認爲沒有一個好的捷徑。 – TZHX 2015-02-05 13:26:20
你的B數組是從A構造的 - 比方說,通過選擇它,或者A和B都是從父對象中選擇的 - 或者是獨立構造的?如果它的構造方式不同,我們可能必須容忍一些浮點錯誤,這就排除了一些其他方便的方法。 – DSM 2015-02-05 13:33:46
@TZHX感謝您的建議:) – 2015-02-05 13:42:32