Сравнение двух массивов numpy и замена значения одного

-4

У меня есть два массива numpy, A и B. A содержит dtypes = ['ID', 'Value', 'Type'] и B содержит dtypes = ['ID', 'Value'].

По сути, я хочу заменить "Значение" в на значение в "B", но только для идентификатора, который находится в обоих (поэтому идентификаторы в B также в A).

A = array([[1,2,3,4,5,6,7],[0.785, 0.985, 0.8562, 0.9652, 0.664, 0.962, 0.872],['sio', 'sco', 'sio', 'sco', 'sio', 'sco', 'sio']])
B = array([[1,2,3],[0.85,0.4585,0.8436]])

Длины A и B, вероятно, будут отличаться по размеру и, следовательно, необходимо отображать значения, а не предполагать, что идентификаторы находятся в одном порядке.

Каков самый быстрый способ сделать это?

спросил(а) 2017-05-04T17:18:00+03:00 3 года, 2 месяца назад
0
54

Надеюсь, что это поможет, я использовал OrderedDict на случай, если ваши данные не только упорядочены ints:

from collections import OrderedDict

A = [[1,2,3,4,5,6,7],[0.785,0.985,0.8562,0.9652,0.664,0.962,0.872],[' sio', 'sco', 'sio', 'sco', 'sio', 'sco','sio']]
B = [[1,2,3],[0.85,0.4585,0.8436]]

a = OrderedDict(zip(*A[:2]))
b = dict(zip(*B))

c = OrderedDict([(k, b[k] if k in b else v) for k, v in a.items()])

A = [c.keys(), c.values(), A[2]]

Выход:

[[1, 2, 3, 4, 5, 6, 7],
[0.85, 0.4585, 0.8436, 0.9652, 0.664, 0.962, 0.872],
[' sio', 'sco', 'sio', 'sco', 'sio', 'sco', 'sio']]

ответил(а) 2017-05-04T18:24:00+03:00 3 года, 2 месяца назад
39

Это достаточно быстро для вас?

import numpy

A = numpy.array([[1,2,3,4,5,6,7],[0.785,0.985,0.8562,0.9652,0.664,0.962,0.872],[' sio', 'sco', 'sio', 'sco', 'sio', 'sco','sio']])
B = numpy.array([[1,2,3],[0.85,0.4585,0.8436]])
for i, x in enumerate(A[0]):
if x in str(B[0]):
A[1,i] = B[1,i]
print A


Ouput:

[['1' '2' '3' '4' '5' '6' '7']
['0.85' '0.4585' '0.8436' '0.9652' '0.664' '0.962' '0.872']
[' sio' 'sco' 'sio' 'sco' 'sio' 'sco' 'sio']]

ответил(а) 2017-05-04T18:21:00+03:00 3 года, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема