根据第一列与 python 中另一个文本文件的匹配选择第二列数据
Selection of second columns data based on match of first column with another text file in python
我对 numpy 数组和迭代知之甚少。我有两个输入
文件。两个文件的第一列代表以毫秒为单位的时间。
输入文件 1 是参考值或模拟值。输入文件 2 是从测试值中获得的。我想比较(plot second vs first)input-2 的第二列
当且仅当相应文件的第一列中的时间匹配时,才将文件与第一个文件的第二列匹配。
我正在通过迭代尝试,但找不到合适的结果 yet.How
在匹配时查找索引?
import numpy as np
my_file=np.genfromtxt('path/input1.txt')
Sim_val=np.genfromtxt('path/input2.txt')
inp1=my_file[:,0]
inp12=my_file[:,1]
inpt2=Sim_val[:,0]
inpt21=Sim_val[:,1]
xarray=np.array(inp1)
yarray=np.array(inp12)
data=np.array([xarray,yarray])
ldata=data.T
zarray=np.array(inpt2)
tarray=np.array(inpt21)
mdata=np.array([zarray,tarray])
kdata=mdata.T
i=np.searchsorted(kdata[:,0],ldata[:,0])
print i
我的 inputfile-2 和 Inputfile-1 是
0 5 0 5
100 6 50 6
200 10 200 15
300 12 350 12
400 15 # Obtained 400 15 #Simulated Value
500 20 #Value 500 25
600 0 650 0
700 11 700 11
800 12 850 8
900 19 900 19
1000 10 1000 3
使用 numpy 数组和迭代真的很困难。
请任何人建议我如何解决上述问题。事实上我
也有其他列,但所有操作都取决于第一列的匹配(时间匹配)。
再次非常感谢。
你是不是想说
import numpy as np
simulated = np.array([
(0, 5),
(100, 6),
(200, 10),
(300, 12),
(400, 15),
(500, 20),
(600, 0),
(700, 11),
(800, 12),
(900, 19),
(1000, 10)
])
actual = np.array([
(0, 5),
(50, 6),
(200, 15),
(350, 12),
(400, 15),
(500, 25),
(650, 0),
(700, 11),
(850, 8),
(900, 19),
(1000, 3)
])
def indexes_where_match(A, B):
""" an iterator that goes over the indexes of wherever the entries in A's first-col and B's first-col match """
return (i for i, (a, b) in enumerate(zip(A, B)) if a[0] == b[0])
def main():
for i in indexes_where_match(simulated, actual):
print(simulated[i][1], 'should be compared to', actual[i][1])
if __name__ == '__main__':
main()
您也可以使用列切片,如下所示:
simulated_time, simulated_values = simulated[..., 0], simulated[..., 1:]
actual_time, actual_values = actual[..., 0], actual[..., 1:]
indexes_where_match = (i for i, (a, b) in enumerate(zip(simulated_time, actual_time)) if a == b)
for i in indexes_where_match:
print(simulated_values[i], 'should be compared to', actual_values[i])
# outputs:
# [5] should be compared to [5]
# [10] should be compared to [15]
# [15] should be compared to [15]
# [20] should be compared to [25]
# [11] should be compared to [11]
# [19] should be compared to [19]
# [10] should be compared to [3]
我对 numpy 数组和迭代知之甚少。我有两个输入 文件。两个文件的第一列代表以毫秒为单位的时间。 输入文件 1 是参考值或模拟值。输入文件 2 是从测试值中获得的。我想比较(plot second vs first)input-2 的第二列 当且仅当相应文件的第一列中的时间匹配时,才将文件与第一个文件的第二列匹配。 我正在通过迭代尝试,但找不到合适的结果 yet.How 在匹配时查找索引?
import numpy as np
my_file=np.genfromtxt('path/input1.txt')
Sim_val=np.genfromtxt('path/input2.txt')
inp1=my_file[:,0]
inp12=my_file[:,1]
inpt2=Sim_val[:,0]
inpt21=Sim_val[:,1]
xarray=np.array(inp1)
yarray=np.array(inp12)
data=np.array([xarray,yarray])
ldata=data.T
zarray=np.array(inpt2)
tarray=np.array(inpt21)
mdata=np.array([zarray,tarray])
kdata=mdata.T
i=np.searchsorted(kdata[:,0],ldata[:,0])
print i
我的 inputfile-2 和 Inputfile-1 是
0 5 0 5
100 6 50 6
200 10 200 15
300 12 350 12
400 15 # Obtained 400 15 #Simulated Value
500 20 #Value 500 25
600 0 650 0
700 11 700 11
800 12 850 8
900 19 900 19
1000 10 1000 3
使用 numpy 数组和迭代真的很困难。 请任何人建议我如何解决上述问题。事实上我 也有其他列,但所有操作都取决于第一列的匹配(时间匹配)。
再次非常感谢。
你是不是想说
import numpy as np
simulated = np.array([
(0, 5),
(100, 6),
(200, 10),
(300, 12),
(400, 15),
(500, 20),
(600, 0),
(700, 11),
(800, 12),
(900, 19),
(1000, 10)
])
actual = np.array([
(0, 5),
(50, 6),
(200, 15),
(350, 12),
(400, 15),
(500, 25),
(650, 0),
(700, 11),
(850, 8),
(900, 19),
(1000, 3)
])
def indexes_where_match(A, B):
""" an iterator that goes over the indexes of wherever the entries in A's first-col and B's first-col match """
return (i for i, (a, b) in enumerate(zip(A, B)) if a[0] == b[0])
def main():
for i in indexes_where_match(simulated, actual):
print(simulated[i][1], 'should be compared to', actual[i][1])
if __name__ == '__main__':
main()
您也可以使用列切片,如下所示:
simulated_time, simulated_values = simulated[..., 0], simulated[..., 1:]
actual_time, actual_values = actual[..., 0], actual[..., 1:]
indexes_where_match = (i for i, (a, b) in enumerate(zip(simulated_time, actual_time)) if a == b)
for i in indexes_where_match:
print(simulated_values[i], 'should be compared to', actual_values[i])
# outputs:
# [5] should be compared to [5]
# [10] should be compared to [15]
# [15] should be compared to [15]
# [20] should be compared to [25]
# [11] should be compared to [11]
# [19] should be compared to [19]
# [10] should be compared to [3]