【问题标题】:How to append to a ndarray如何附加到ndarray
【发布时间】:2020-01-14 01:18:18
【问题描述】:

我是来自 Python 的 Numpy 库的新手,我不确定我在这里做错了什么,你能帮我解决这个问题吗?

所以,我像这样初始化我的 ndarray。

A = np.array([])

然后我正在训练将一个新的数组 X 添加到这个数组 A 中,如果有任何重要性,它的形状类似于 (1000,32,32)。

 np.insert(A, X)

这里的问题是,如果我在检查 ndarray A 之后它是空的,即使 ndarray X 里面有元素。 你能解释一下我到底做错了什么吗?

【问题讨论】:

  • numpy.ndarray 对象是固定大小的数组。 .insert.append 返回新数组对象
  • 我认为你需要从np.concatenate开始。用它的例子来练习。注意维度的数量。你的Ashape 是什么?这和X 有什么共同点吗?不要试图模仿[] 并列出append。为什么要尝试将X 附加到A?为什么不直接使用X

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


【解决方案1】:

如果你使用np.append,请确保回信给A,如A = np.append(A,X)——顶级numpy函数如np.insertnp.append通常是不可变的,所以即使它给你一个值返回,存储它是你的工作。 np.array 喜欢扁平化 np.ndarray 如果你使用 append,老实说,我认为你只想要一个普通的 list 用于 A,并且 that append 方法 is可变的,所以不需要写回来。

>>> A = []
>>> X = np.ndarray((1000,32,32))
>>> A.append(X)

>>> print(A)
[array([[[1.43351171e-316, 4.32573840e-317, 4.58492919e-320, ...,
         1.14551501e-259, 6.01347002e-154, 1.39804329e-076],
        [1.39803697e-076, 1.39804328e-076, 1.39642638e-076, ...,
         1.18295070e-076, 7.06474122e-096, 6.01347002e-154],
        [1.39804328e-076, 1.39642638e-076, 1.39804065e-076, ...,
         1.05118732e-153, 6.01334510e-154, 3.24245662e-086],
...

【讨论】:

  • 这是np.append 使输入变平 - 如果未提供轴。阅读文档,或者更好的是,阅读函数自己的代码。时间不长。
【解决方案2】:
In [10]: A = np.array([])                                                                        
In [11]: A.shape                                                                                 
Out[11]: (0,)

In [13]: np.concatenate([A, np.ones((2,3))])                                                     
---------------------------------------------------------------------------
...
ValueError: all the input arrays must have same number of dimensions, but the array at index 0 has 1 dimension(s) and the array at index 1 has 2 dimension(s)

因此,您需要了解 numpy 数组的第一件事是它们具有 shape 和多个维度。希望错误信息是明确的。

与另一个一维数组连接确实有效:

In [14]: np.concatenate([A, np.arange(3)])                                                       
Out[14]: array([0., 1., 2.])

但这只是np.arange(3)。连接对我们没有任何作用。好的,你可以想象像这样开始一个循环。但是不要。这效率不高。

只要维度遵守文档中指定的规则,您就可以轻松连接数组列表。只要你认真对待数组的维度,这些规则是合乎逻辑的。

In [15]: X = np.ones((1000,32,32))                                                               
In [16]: np.concatenate([X,X,X], axis=1).shape                                                   
Out[16]: (1000, 96, 32)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    相关资源
    最近更新 更多