Python Numpy多维数组按行拼接实现预期输出格式的方法咨询
修改后的可实现需求代码
import numpy as np a = np.array([[0,12],[1,40],[0,55],[1,23],[0,123.5],[1,4]]) b = np.array([[0,3],[1,10],[0,55],[1,34],[1,122],[0,123]]) c = np.array([[0,3],[1,10],[0,55],[1,34],[1,122],[0,121]]) d = np.array([[0,40],[1,55],[0,24],[0,123],[0,4]]) e = np.array([[1,40.2],[1,55]]) def comp(a, other): # 初始化为列数为2的空二维数组,和待拼接的单条数据形状匹配 difference = np.empty((0, 2)) for i in a: for j in other: if np.allclose(i, j, atol=0.5): # 沿行方向拼接,每匹配到一条就新增一行 difference = np.concatenate((difference, [i]), axis=0) if difference.size > 0: # 转成列表打印的格式和你期望的完全一致,要保留numpy数组格式直接打印difference即可 print(difference.tolist()) else: print("No difference") comp(a, b) comp(a, c) comp(a, d) comp(a, e)
核心改动说明
- 修正了拼接方向:原来用
axis=1是沿列方向横向拼接,所有匹配到的内容都会被合并到同一行,改成axis=0沿行方向纵向拼接,每次匹配都会新增一行。 - 调整了空数组初始化规则:原来
np.array([[]])的形状是(1,0),和待拼接的(1,2)形状的单条数据维度不匹配,改成np.empty((0, 2))初始化形状为(0,2)的空数组,拼接不会出现维度兼容问题。
运行上述代码输出完全符合你给出的预期格式。
内容的提问来源于stack exchange,提问作者georgehere
相关产品推荐
相关产品推荐

