繁体   English   中英

比较两个 numpy 数组并替换 1 的值

[英]Comparing two numpy arrays and replacing value of one

我有两个 numpy 数组,A 和 B。A 包含 dtypes = ['ID','Value','Type'],B 包含 dtypes = ['ID','Value']。

本质上,我想用“B”中的值替换 A 中的“值”,但仅用于两者中的“ID”(因此 B 中的 ID 也在 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 的长度可能在大小上不同,因此需要映射值而不是假设 id 的顺序相同。

这样做的最快方法是什么?

希望这会有所帮助,我使用OrderedDict以防万一您的数据不仅是有序整数:

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']]

这对你来说足够快吗?

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

输出:

[['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']]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM