Привет всем, и, пожалуйста, извините мое ограниченное программирование knoweledge. У меня есть два массива типа:Сравнение массивов различных массивов длины в 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' - это упростит чтение, но не знает, если он быстрее. Ваша проблема в том, что вы проходите через A для каждой строки B, и я не думаю, что есть хороший ярлык из этого. – TZHX
Является ли ваш массив B построенным из A - скажем, выбирая из него или как A, так и B выбирается из родительского объекта - или он построен независимо? Если он построен по-другому, мы, возможно, должны проявлять терпимость к некоторой ошибке с плавающей запятой, что исключает некоторые удобные подходы. – DSM
@TZHX спасибо за предложение :) –