【问题标题】:Issue appending ndarray's with different shapes问题附加具有不同形状的 ndarray
【发布时间】:2018-04-26 06:39:16
【问题描述】:

我有一个形状为 (25,2) 的 numpy ndarray,我正在尝试追加一个形状为 (2,) 的值。

我曾尝试使用append 方法,但到目前为止还没有成功。

有什么想法吗? 谢谢!

【问题讨论】:

  • 您可以使用np.vstack。它不能就地工作,因此您必须分配回:a = np.vstack([a, b])

标签: numpy numpy-ndarray


【解决方案1】:

要让 append 以这种方式工作,您需要满足 documentation 中指定的两个条件。

  1. 附加的对象必须具有相同的尺寸。它的形状应该是(1, 2)
  2. 您必须指定要连接的轴,否则 numpy 会将数组展平。

例如:

import numpy
x = numpy.ones((3, 2))
y = [[1, 2]]
numpy.append(x, y, axis=0)

结果:

array([[ 1.,  1.],
       [ 1.,  1.],
       [ 1.,  1.],
       [ 1.,  2.]])

【讨论】:

    【解决方案2】:

    append method 遇到了哪些错误? “没有运气”和“没用”一样糟糕。在正确的问题中,您应该显示预期值以及错误。然而,这个话题经常出现,我们可以做出很好的猜测。

    In [336]: a = np.ones((3,2),int)
    In [337]: b = np.zeros((2,),int)
    

    但首先我会迂腐尝试append method

    In [338]: a.append(b)
    ---------------------------------------------------------------------------
    AttributeError                            Traceback (most recent call last)
    <ipython-input-338-d6231792f85d> in <module>()
    ----> 1 a.append(b)
    
    AttributeError: 'numpy.ndarray' object has no attribute 'append'
    

    lists 有一个 append 方法; numpy 数组没有。

    有一个名字不好的append函数:

    In [339]: np.append(a,b)
    Out[339]: array([1, 1, 1, 1, 1, 1, 0, 0])
    In [340]: _.reshape(-1,2)
    Out[340]: 
    array([[1, 1],
           [1, 1],
           [1, 1],
           [0, 0]])
    

    这行得通 - 在某种程度上。但如果我阅读文档并提供一个轴参数:

    In [341]: np.append(a,b, axis=0)
    ...
    -> 5166     return concatenate((arr, values), axis=axis)
    ValueError: all the input arrays must have same number of dimensions
    

    现在它只是调用np.concatenate,将两个参数变成一个列表。

    如果这是您遇到的错误并且不理解,您可能需要查看有关尺寸和形状的基本 numpy 文档。

    a 是 2d,b 是 1d。要连接,我们需要重塑b,使其成为(1,2),这是与a 的(3,2) 兼容的形状。有几种方法可以做到这一点:

    In [342]: np.concatenate((a, b.reshape(1,2)), axis=0)
    Out[342]: 
    array([[1, 1],
           [1, 1],
           [1, 1],
           [0, 0]])
    

    远离np.append;这对许多初学者来说太令人困惑了,并且没有为基础 concatenate 添加任何重要的东西。

    【讨论】:

    • 谢谢!!! 'np.concatenate((a, b.reshape(1,2)), axis=0)' 非常完美!
    猜你喜欢
    • 2013-12-24
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 2021-03-29
    • 1970-01-01
    • 2018-05-13
    相关资源
    最近更新 更多