【问题标题】:How to combine these two numpy arrays?如何组合这两个numpy数组?
【发布时间】:2020-12-08 17:56:02
【问题描述】:

如何组合这两个数组:

x = np.asarray([[1.0, 1.1, 1.2, 1.3], [2.0, 2.1, 2.2, 2.3], [3.0, 3.1, 3.2, 3.3], 
                 [4.0, 4.1, 4.2, 4.3], [5.0, 5.1, 5.2, 5.3]])
y = np.asarray([[0.1], [0.2], [0.3], [0.4], [0.5]])

变成这样:

xy = [[0.1, [1.0, 1.1, 1.2, 1.3]], [0.2, [2.0, 2.1, 2.2, 2.3]...

感谢您的帮助!

有人建议我发布我尝试过的代码,但我意识到我忘记了:

xy = np.array(list(zip(x, y)))

这是我目前的解决方案,但是效率极低。

【问题讨论】:

  • 您忘记发布您尝试过的代码。
  • 在 NumPy 中,原来的两个独立的数组使用起来会更加方便和高效。
  • 这将是理想的,但是我必须随机化两个数组,因此需要先将它们配对在一起。
  • 不,你没有。如果您要按相同顺序对它们进行改组,则可以通过生成单个随机排列数组并将该排列应用于两个数组来实现。
  • 您可以创建一个 (5,2) 对象 dtype 数组并分配这些数组(要小心)。或者制作 (5,) 形状的结构化数组,并将数组分配给字段。但如果你所做的只是洗牌,我同意最好将它们分开。

标签: python arrays python-3.x numpy


【解决方案1】:

可以使用zip进行组合

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

输出:

[[array([0.1]), array([1. , 1.1, 1.2, 1.3])],
 [array([0.2]), array([2. , 2.1, 2.2, 2.3])],
 [array([0.3]), array([3. , 3.1, 3.2, 3.3])],
 [array([0.4]), array([4. , 4.1, 4.2, 4.3])],
 [array([0.5]), array([5. , 5.1, 5.2, 5.3])]]

【讨论】:

    【解决方案2】:

    纯 numpy 解决方案将比对大型数组的列表理解要快得多。

    我不得不说您的用例毫无意义,因为将这些数组放入单个数据结构中没有逻辑,我认为您应该重新检查您的设计。

    就像@user2357112 支持莫妮卡微妙暗示,这很可能是XY problem。看看这是否是真的您要解决的问题,而不是其他问题。如果您想要其他东西,请尝试询问那个

    我强烈建议您在继续之前检查您想要做什么,因为您会将自己置于一个设计糟糕的地方。


    除此之外,这里有一个解决方案

    import numpy as np
    
    
    x = np.asarray([[1.0, 1.1, 1.2, 1.3], [2.0, 2.1, 2.2, 2.3], [3.0, 3.1, 3.2, 3.3],
                     [4.0, 4.1, 4.2, 4.3], [5.0, 5.1, 5.2, 5.3]])
    y = np.asarray([[0.1], [0.2], [0.3], [0.4], [0.5]])
    
    
    xy = np.hstack([y, x])
    print(xy)
    

    打印

    [[0.1 1.  1.1 1.2 1.3]
     [0.2 2.  2.1 2.2 2.3]
     [0.3 3.  3.1 3.2 3.3]
     [0.4 4.  4.1 4.2 4.3]
     [0.5 5.  5.1 5.2 5.3]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-03
      • 1970-01-01
      相关资源
      最近更新 更多