我是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的初学者,我不知道自己是否正确解决了这个问题。我希望你能帮助我。先感谢您。我真的很感谢您的帮助。

最佳答案

您的数组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])

关于python - 两个数组之间的按行比较,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55296099/

10-12 18:54