Сравните две таблицы и извлеките столбцы, похожие на обе - PullRequest
0 голосов
/ 09 ноября 2019

введите описание изображения здесь Привет, у меня есть две матрицы данных, одна из которых A, а другая B. Я хочу сравнить первую строку A с той из B, и если совпадение найдено в B, тогда весь столбец (столбцы) в B должен быть извлечен. В прилагаемом файле под A, 11, 12, 13 и 14 также можно найти в B. В этом случае все значения под 11, 12, 13 и 14 в B извлекаются в C. Другими словами, A являетсявектор строки, и я хочу сравнить его с первой строкой B.

У меня есть следующее выражение Matlab, которое работает, и я хотел бы перевести его на python:

C = B(:,ismember(B(1,:),A))

Спасибо!

1 Ответ

0 голосов
/ 09 ноября 2019
A = [[11, 12, 13, 14]]

B = [[11, 12, 13, 14, 15, 16],
     [2, 1.1, 1.1, 1.3, 1.4, 1.5],
     [2, 1.1, 1.1, 1.3, 1.4, 1.5],
     [2, 1.1, 1.1, 1.3, 1.4, 1.5],
     [2, 1.1, 1.1, 1.3, 1.4, 1.5]]

# Get difference between two lists.
diffs = set(A[0]).symmetric_difference(set(B[0]))


# Get the members index with list comprehension.
indexes = [B[0].index(diff) for diff in diffs]

# Copy B into C. Use copy() otherwise only the reference will be copied.
C = B.copy()

# Delete the columns of C
# This is slow but more readable since you are a beginner in python.
for row in C: 
    for index in indexes:
        del row[index]

    print(row)

Какие выходы:

[11, 12, 13, 14]
[2, 1.1, 1.1, 1.3]
[2, 1.1, 1.1, 1.3]
[2, 1.1, 1.1, 1.3]
[2, 1.1, 1.1, 1.3]

Этот код далек от оптимизации, он просто показывает несколько шагов для достижения результата.

...