我是Numpy和Python的新手,我有疑问。我希望你能帮助我。
说,我有两个数组。这两个数组都有11列,第一列是索引。
这是array1的示例。顺便说一下,array1将是一个不断更新的实时数组。
[(0, 537, 504, 547, 560, 553, -92, -5132, 15972, 1, 1)
(0, 537, 504, 547, 559, 553, -100, -5128, 16108, 1, 1)
(0, 537, 504, 547, 560, 553, -124, -5088, 16092, 1, 1)
(0, 537, 504, 547, 559, 553, -140, -5160, 16164, 1, 1)
(0, 537, 504, 547, 560, 552, -112, -5320, 16072, 1, 1)
(0, 537, 504, 547, 560, 552, -24, -5092, 16092, 1, 1)
(0, 537, 504, 547, 560, 551, -148, -5104, 16108, 1, 1)
(0, 537, 504, 547, 560, 551, -92, -5136, 16092, 1, 1)
(0, 537, 504, 547, 560, 551, 4, -5032, 16076, 1, 1)
(0, 537, 504, 547, 560, 551, -60, -5096, 15944, 1, 1)
(0, 537, 504, 547, 560, 552, -48, -5084, 16072, 1, 1)
(0, 537, 504, 547, 560, 552, -48, -5084, 16072, 1, 1)
(0, 537, 504, 547, 560, 552, -48, -5084, 16072, 1, 1)
(0, 537, 504, 547, 560, 552, -48, -5084, 16072, 1, 1)]
我想将array1的最后一行的值与array2的所有行进行比较。 (它必须是array1的最后一行,因为它的内容将来自不断更新的csv文件)。我想搜索array1的最后一行的非标签列和array2的所有非标签行之间最接近的行值。 array1中的标签将为null,并且不会计入比较中。它不一定要完全匹配,但我希望它可以在设置的公差范围内找到最接近的匹配。 array2将充当各种字典,其标签用作参考,而这些单独标签的行中的特征用作样本。我是要实现这一权利,还是有一种更合适的方法来实现这一目标?我打算有26种不同类型的标签,分别代表array2中26个字母,每个标签都有特定的列功能集。这26种类型的标签各有10个样本行。公差范围应由每个标签的那10个样品表示。这是array2中的csv数据示例(我已经可以将其转换为数组)。
LABEL,F1,F2,F3,F4,F5,X,Y,Z,C1,C2
1, 537, 504, 547, 560, 553, -92, -5132, 15972, 1, 1
1, 537, 504, 547, 559, 553, -100, -5128, 16108, 1, 1
1, 537, 504, 547, 560, 553, -124, -5088, 16092, 1, 1
1, 537, 504, 547, 559, 553, -140, -5160, 16164, 1, 1
1, 537, 504, 547, 560, 552, -112, -5320, 16072, 1, 1
1, 537, 504, 547, 560, 552, -24, -5092, 16092, 1, 1
1, 537, 504, 547, 560, 551, -148, -5104, 16108, 1, 1
1, 537, 504, 547, 560, 551, -92, -5136, 16092, 1, 1
1, 537, 504, 547, 560, 551, 4, -5032, 16076, 1, 1
1, 537, 504, 547, 560, 551, -60, -5096, 15944, 1, 1
2, 537, 504, 547, 560, 553, -92, -5132, 15972, 0, 0
2, 537, 504, 547, 559, 553, -100, -5128, 16108, 0, 0
2, 537, 504, 547, 560, 553, -124, -5088, 16092, 0, 0
2, 537, 504, 547, 559, 553, -140, -5160, 16164, 0, 0
2, 537, 504, 547, 560, 552, -112, -5320, 16072, 0, 0
2, 537, 504, 547, 560, 552, -24, -5092, 16092, 0, 0
2, 537, 504, 547, 560, 551, -148, -5104, 16108, 0, 0
2, 537, 504, 547, 560, 551, -92, -5136, 16092, 0, 0
2, 537, 504, 547, 560, 551, 4, -5032, 16076, 0, 0
2, 537, 504, 547, 560, 551, -60, -5096, 15944, 0, 0
1是A,2是B。如您所见,它们的唯一区别是最后两列中的1和0。但是,其他字母在多列中会有所不同,这就是为什么我要让array1的最后一行在array2中搜索最接近的匹配项。
我想在两个数组之间进行集体的按行比较。
最后,我要打印array2的标签,其功能最接近array1的最新行。并且由于array1中的输入将不断更新,因此如果array1的最后一行随后将更改值并对应于不同的标签,我希望它也相应地实时更新。
再次,我是Python和Numpy的新手,我不知道我是否正确地解决了这个问题。我希望你能帮助我。先感谢您。我真的很感谢您的帮助。
答案 0 :(得分:0)
您的数组A和B:
A = np.array([(0, 537, 504, 547, 560, 553, -92, -5132, 15972, 1, 1),
(0, 537, 504, 547, 559, 553, -100, -5128, 16108, 1, 1),
(0, 537, 504, 547, 560, 553, -124, -5088, 16092, 1, 1),
(0, 537, 504, 547, 559, 553, -140, -5160, 16164, 1, 1),
(0, 537, 504, 547, 560, 552, -112, -5320, 16072, 1, 1),
(0, 537, 504, 547, 560, 552, -24, -5092, 16092, 1, 1),
(0, 537, 504, 547, 560, 551, -148, -5104, 16108, 1, 1),
(0, 537, 504, 547, 560, 551, -92, -5136, 16092, 1, 1),
(0, 537, 504, 547, 560, 551, 4, -5032, 16076, 1, 1),
(0, 537, 504, 547, 560, 551, -60, -5096, 15944, 1, 1),
(0, 537, 504, 547, 560, 552, -48, -5084, 16072, 1, 1),
(0, 537, 504, 547, 560, 552, -48, -5084, 16072, 1, 1),
(0, 537, 504, 547, 560, 552, -48, -5084, 16072, 1, 1),
(0, 537, 504, 547, 560, 552, -48, -5084, 16072, 1, 1)])
B = np.array([[1, 537, 504, 547, 560, 553, -92, -5132, 15972, 1, 1],
[1, 537, 504, 547, 559, 553, -100, -5128, 16108, 1, 1],
[1, 537, 504, 547, 560, 553, -124, -5088, 16092, 1, 1],
[1, 537, 504, 547, 559, 553, -140, -5160, 16164, 1, 1],
[1, 537, 504, 547, 560, 552, -112, -5320, 16072, 1, 1],
[1, 537, 504, 547, 560, 552, -24, -5092, 16092, 1, 1],
[1, 537, 504, 547, 560, 551, -148, -5104, 16108, 1, 1],
[1, 537, 504, 547, 560, 551, -92, -5136, 16092, 1, 1],
[1, 537, 504, 547, 560, 551, 4, -5032, 16076, 1, 1],
[1, 537, 504, 547, 560, 551, -60, -5096, 15944, 1, 1],
[2, 537, 504, 547, 560, 553, -92, -5132, 15972, 0, 0],
[2, 537, 504, 547, 559, 553, -100, -5128, 16108, 0, 0],
[2, 537, 504, 547, 560, 553, -124, -5088, 16092, 0, 0],
[2, 537, 504, 547, 559, 553, -140, -5160, 16164, 0, 0],
[2, 537, 504, 547, 560, 552, -112, -5320, 16072, 0, 0],
[2, 537, 504, 547, 560, 552, -24, -5092, 16092, 0, 0],
[2, 537, 504, 547, 560, 551, -148, -5104, 16108, 0, 0],
[2, 537, 504, 547, 560, 551, -92, -5136, 16092, 0, 0],
[2, 537, 504, 547, 560, 551, 4, -5032, 16076, 0, 0],
[2, 537, 504, 547, 560, 551, -60, -5096, 15944, 0, 0]])
B与A的最后一行之间的差异
D = B - A[-1]
“最近”始终是一种讨论,但是说您想要一个绝对值总和最小的情况。
np.abs(D).sum(axis=1).argmin()
这使第5行最接近。
B[np.abs(D).sum(axis=1).argmin()]
产生:
array([ 1, 537, 504, 547, 560, 552, -24, -5092, 16092,
1, 1])