Я пытаюсь объединить / объединить два numpy массива на основе некоторого столбца наиболее эффективным способом.
Вот мои два numpy массива:
import numpy as np
a1 = np.array([('a', 4.672, 0.999),
('b', 2.24, 0.999),
('c', 1.984, 0.9001),])
a2 = np.array([('a', 4.67),
('c', 2.24)])
Вот моя функция, которая возвращает массив строк индексов размера a1, соответствующих первому столбцу a2 . Я использую это позже, чтобы сделать массив одинакового размера и объединить. Поэтому мне нужно [0, -, 1]
для a1, который дает индекс совпадающих строк для a2.
def find_indices(x, y):
x = x[:, 0]
y = y[:, 0]
index = np.argsort(x)
sorted_x = x[index]
sorted_index = np.searchsorted(sorted_x, y)
yindex = np.take(index, sorted_index, mode="clip")
mask = x[yindex] != y
result = np.ma.array(yindex, mask=mask)
return result
find_indices(a2, a1)
Это возвращает этот массив, который кажется хорошим. .data, я получаю реплицированные данные,
a2[idx.data]
array([['a', '4.67'],
['c', '2.24'],
['c', '2.24']], dtype='<U4')
, тогда как вывод должен быть:
array([['a', '4.67'],
-- ,
['c', '2.24']], dtype='<U4')
Как исправить эту ошибку?