【问题标题】:Compare two numpy arrays and return matching nth element of row比较两个 numpy 数组并返回匹配的行的第 n 个元素
【发布时间】:2022-01-27 22:10:57
【问题描述】:

我有 2 个 numpy 数组:

第一个数组包含 3 个元素的矩阵:类名、ID、坐标

['Mobile Phone', '000ad20b5e452b24','0.0196.800512617.6939.200512']

第二个数组包含 3 个元素的矩阵:类名、ID、图像数组:

['Mobile Phone', '000ad20b5e452b24',
        array([[[183, 205, 210],
                [181, 203, 208],
                [186, 206, 211],
                ...,
                [202, 216, 222],
                [201, 213, 219],
                [202, 214, 220]],

               [[178, 200, 205],
                [177, 199, 204],
                [179, 199, 204],
                ...,
                [186, 200, 206],
                [189, 201, 207],
                [194, 206, 212]],

               [[174, 196, 201],
                [173, 195, 200],
                [174, 193, 200],
                ...,
                [170, 184, 190],
                [172, 184, 190],
                [177, 189, 195]],

               ...,

               [[217, 226, 235],
                [216, 225, 234],
                [213, 222, 231],
                ...,
                [ 88,  97, 110],
                [ 96, 105, 118],
                [100, 109, 122]],

               [[202, 209, 218],
                [193, 200, 209],
                [181, 190, 199],
                ...,
                [124, 128, 139],
                [134, 138, 149],
                [139, 143, 154]],

               [[183, 190, 199],
                [168, 175, 184],
                [152, 161, 170],
                ...,
                [147, 149, 159],
                [160, 162, 173],
                [167, 169, 180]]]

第一个数组可以有重复的 ID,但第二个没有。

对于第一个数组中的每一行,我想检查第二个数组是否具有相同的 id 和类名并附加或获取图像数组。

【问题讨论】:

  • 可能更容易将其视为合并操作stackoverflow.com/questions/53645882/pandas-merging-101
  • 我也是这么想的,但是因为我要构建一个卷积神经网络,我需要保持图像数组的形状,使用 RGB,我担心这样做我会失去从熊猫重新转换时的数组
  • 完全不会有问题,numpy数组会被保留
  • 太好了,谢谢!我会这样做。如果你想提出你的答案,我可以将其标记为已解决!

标签: python pandas numpy for-loop


【解决方案1】:

这是一个简化的示例,带有一维数组。只有一个类将匹配,在图像数组中找不到另一个示例。内连接会捕获想要的匹配,你可以通过检查图像数据的数据类型看到它仍然是一个ndarray。

import numpy as np
classes = np.array([['Mobile Phone', '000ad20b5e452b24','0.0196.800512617.6939.200512'],
                  ['Mobile Phone', '000ad20b5e99999','0.0196.800512617.6939.200512']])

image_data = np.array([['Mobile Phone', '000ad20b5e452b24', np.array([183, 205, 210])],
                       ['Mobile Phone', '000ad20b5e444444', np.array([183, 205, 210])]])
              
    
c = pd.DataFrame(classes, columns=['class','id','coordinates'])
i = pd.DataFrame(image_data, columns=['class','id','image'])

output = c.merge(i, on=['class','id'], how='inner')

print(output)

print(type(output['image'].iloc[0]))

输出

    class           id                  coordinates                     image
0   Mobile Phone    000ad20b5e452b24    0.0196.800512617.6939.200512    [183, 205, 210]

<class 'numpy.ndarray'>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    相关资源
    最近更新 更多