【问题标题】:Python: Add a column to numpy 1d arrayPython:向 numpy 1d 数组添加一列
【发布时间】:2018-02-27 23:04:09
【问题描述】:

我有 2 个数组。

a = np.zeros(2)
b = np.ones(2)

我想将它们组合起来,使其输出为:

array([[0, 1],
       [0, 1]])

如果我有a = np.zeros((2,1))b = np.zeros((2,1)),这可以用np.hstack((a,b))np.append(a,b,1) 完成。但我没有。

有什么想法吗?

【问题讨论】:

  • 解决方案正盯着你。添加所需的尺寸。或者偷懒,使用一个为你添加它们的函数。

标签: python arrays python-3.x numpy


【解决方案1】:

您可以使用np.c_

>>> a = np.zeros(2); b = np.ones(2)
>>> np.c_[a, b]
array([[0., 1.],
       [0., 1.]])

或者:

>>> np.array((a, b), order='F').T
array([[0., 1.],
       [0., 1.]])

这里order='F'确保最终结果是C-contiguous

【讨论】:

    【解决方案2】:

    您始终可以添加尾随维度...

    >>> np.hstack([a[:,None], b[:,None]])
    array([[ 0.,  1.],
           [ 0.,  1.]])
    >>>
    

    【讨论】:

      【解决方案3】:

      您需要向数组添加额外维度的一种或其他方式。

      In [2]: a = np.zeros(2)
         ...: b = np.ones(2)
         ...: 
      

      stack 让您选择新维度:

      In [3]: np.stack((a,b),axis=1)
      Out[3]: 
      array([[0., 1.],
             [0., 1.]])
      
      In [4]: np.stack((a,b),axis=0)
      Out[4]: 
      array([[0., 0.],
             [1., 1.]])
      

      np.array 也可以这样做,例如带有轴 0 的 stack - 转置以获取列:

      In [5]: np.array((a,b)).T
      Out[5]: 
      array([[0., 1.],
             [0., 1.]])
      

      column_stack 是较旧的stack,它也为这种情况添加了正确的尺寸。

      In [6]: np.column_stack((a,b))
      Out[6]: 
      array([[0., 1.],
             [0., 1.]])
      

      学习使用concatenate 和您自己添加维度是一个好主意。并查看各种 stack 函数的代码,看看它们是如何完成相同任务的。

      【讨论】:

        【解决方案4】:

        你也可以重塑它们:

        >>> a, b = np.zeros(2), np.ones(2)
        >>> np.hstack([a.reshape(2,1), b.reshape(2,1)])
        array([[ 0.,  1.],
               [ 0.,  1.]])
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-10-12
          • 1970-01-01
          • 1970-01-01
          • 2022-09-23
          • 2021-12-29
          • 1970-01-01
          • 2022-01-09
          相关资源
          最近更新 更多