【问题标题】:Combining 2d numpy array "row-wise"结合 2d numpy 数组“逐行”
【发布时间】:2021-01-10 03:41:49
【问题描述】:

我有两个用 numpy 创建的二维数组(但行的长度不同):

a = [[1,2,3,4,5],
     [6,7,8,9]]

b = [[1,2,30,40,50],
     [6,7,80,90,100]]

我想将这两个数组组合成一个新数组,保留重复值并“逐行”添加新值:

#desired output

c = [[1,2,3,4,5,30,40,50],
     [6,7,8,9,80,90,100]]

我尝试了很多方法,包括 np.apply_along_axis 和 np.unique 或简单地循环每一行并附加到一个列表,然后创建一个数组形式该列表。我得到的最接近的结果是数组数组,如下所示:

array(array([1,2,3,4,5,30,40,50]), array([6,7,80,90,100]))

上面的结果没有帮助,我需要一个 numpy 数组。任何帮助将不胜感激。

【问题讨论】:

  • a有两个元素,一个长度为5,一个长度为4。是故意的吗?
  • 是的,它们不会共享相同的尺寸。
  • a 和b 的每个子数组中是否有重复项?
  • 不能保证,因为我会将此机器学习算法应用于任何数据集。

标签: python arrays numpy numpy-ndarray array-broadcasting


【解决方案1】:

让我们使用union:

[np.union1d(x,y) for x,y in zip(a,b)]

输出:

[array([ 1,  2,  3,  4,  5, 30, 40, 50]),
 array([  6,   7,   8,   9,  80,  90, 100])]

如果你真的需要列表列表:

[np.union1d(x,y).tolist() for x,y in zip(a,b)]

输出:

[[1, 2, 3, 4, 5, 30, 40, 50], [6, 7, 8, 9, 80, 90, 100]]

【讨论】:

  • 谢谢,这样就可以了!
猜你喜欢
  • 2012-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-05
相关资源
最近更新 更多