【问题标题】:How to add columns to a big numpy matrix如何将列添加到一个大的 numpy 矩阵
【发布时间】:2018-03-12 22:48:52
【问题描述】:

我碰巧有一个2-DNumPy 数组形式:

2 3
1 2
3 9 
.
.
.

我需要向其中添加另一列,以便它代表前两列的squared sum,例如:

2 3 13
1 2 5
3 9 36
. 
.
.

我应该使用哪些NumPy 函数来添加第三列?我的数组有大量行,我想在不使用 for 循环的情况下做到这一点。

【问题讨论】:

    标签: python arrays numpy matrix scipy


    【解决方案1】:

    它很简单,将第一列和第二列切片并找到平方和并连接到其原始 numpy 矩阵。

    只有一行。

           np.concatenate((x,np.array([x[:,0]**2 + x[:,-1]**2]).T),axis=1)
    

    【讨论】:

    • 其他答案也可以缩减为一行,但没必要。您的答案并没有更好,甚至更糟,因为它不能泛化到多个列。
    • 当然如他所说的一般化。你可以通过添加更多行来尝试,这可能是你所说的。
    【解决方案2】:
    In [273]: x=np.array([[2,3],[1,2],[3,9]])
    In [274]: x**2
    Out[274]: 
    array([[ 4,  9],
           [ 1,  4],
           [ 9, 81]], dtype=int32)
    

    keepdims 在保持二维形状的同时执行求和

    In [275]: (x**2).sum(axis=1, keepdims=True)
    Out[275]: 
    array([[13],
           [ 5],
           [90]], dtype=int32)
    

    那么直接连接是可能的:

    In [276]: np.concatenate((x,_),axis=1)
    Out[276]: 
    array([[ 2,  3, 13],
           [ 1,  2,  5],
           [ 3,  9, 90]])
    

    reshapehstackcolumn_stack 做同样的事情,只是创建连接的列数组的方式不同。

    【讨论】:

    • 是的,但是当我发布我的答案时,我没有看到其他答案。不过,我想这也无济于事,那几秒钟可能是 2 票和没有票之间的差异。
    • @cᴏʟᴅsᴘᴇᴇᴅ,我只是指出我们答案的共同点,与优先级或投票无关。
    • 啊,好吧。我可能对你的陈述读得太多了。发生这种情况时有点令人沮丧 - 两个答案之间存在微小差异,但只有一个被认可。无论如何,我支持你,祝你好运。
    【解决方案3】:

    先计算平方和,然后用numpy.column_stack与原数组绑定:

    a = np.array([[2,3], [1,2], [3,9]])
    
    np.column_stack((a, np.sum(np.power(a, 2), axis=1)))
    #array([[ 2,  3, 13],
    #       [ 1,  2,  5],
    #       [ 3,  9, 90]])
    

    【讨论】:

      猜你喜欢
      • 2019-04-07
      • 1970-01-01
      • 1970-01-01
      • 2016-02-29
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 2017-03-04
      相关资源
      最近更新 更多