如何创建一个空数组并追加它?

问题描述 投票:0回答:1

我是一个编程新手,我试图运行这段代码。

from numpy import *

x = empty((2, 2), int)

x = append(x, array([1, 2]), axis=0)

x = append(x, array([3, 5]), axis=0)

print(x)

但我得到这个错误

Traceback (most recent call last):
  File "/home/samip/PycharmProjects/MyCode/test.py", line 3, in <module>

    x = append(x, array([1, 2]), axis=0)

  File "<__array_function__ internals>", line 5, in append

  File "/usr/lib/python3/dist-packages/numpy/lib/function_base.py", line 4700, in append

    return concatenate((arr, values), axis=axis)

  File "<__array_function__ internals>", line 5, in concatenate

ValueError: all the input arrays must have same number of dimensions, but the array at index 0 has 2 dimension(s) and the array at index 1 has 1 dimension(s)
python arrays numpy append
1个回答
1
投票

你可以通过以下方法创建空列表 []. 要添加新项目,请使用 append. 如需添加其他列表,请使用 extend.

x = [1, 2, 3]
x.append(4)
x.extend([5, 6])

print(x) 
# [1, 2, 3, 4, 5, 6]

1
投票

问题是,这条线 x = empty((2, 2), int) 正在创建一个二维数组。

后来当你尝试追加 array([1, 2]) 你得到一个错误,因为它是一个1D数组。

你可以试试下面的代码。

from numpy import *

x = empty((2, 2), int)

x = append(x,[1,2])

print(x)


1
投票

我怀疑你是想复制这个工作列表代码。

In [56]: x = []                                                                 
In [57]: x.append([1,2])                                                        
In [58]: x                                                                      
Out[58]: [[1, 2]]
In [59]: np.array(x)                                                            
Out[59]: array([[1, 2]])

但是是用数组

In [53]: x = np.empty((2,2),int)                                                
In [54]: x                                                                      
Out[54]: 
array([[73096208, 10273248],
       [       2,       -1]])

尽管名字很好听,但是... np.empty 数组不是空列表的关闭。 它有4个元素,是你指定的形状。

In [55]: np.append(x, np.array([1,2]), axis=0)                                  
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-55-64dd8e7900e3> in <module>
----> 1 np.append(x, np.array([1,2]), axis=0)

<__array_function__ internals> in append(*args, **kwargs)

/usr/local/lib/python3.6/dist-packages/numpy/lib/function_base.py in append(arr, values, axis)
   4691         values = ravel(values)
   4692         axis = arr.ndim-1
-> 4693     return concatenate((arr, values), axis=axis)
   4694 
   4695 

<__array_function__ internals> in concatenate(*args, **kwargs)

ValueError: all the input arrays must have same number of dimensions, but the array at index 0 has 2 dimension(s) and the array at index 1 has 1 dimension(s)

请注意 np.append 已将任务交给 np.concatenate. 有了轴参数,这就是这个append的全部功能。 它不是一个列表追加克隆。

np.concatenate 要求它的输入尺寸一致。 一个是(2,2),另一个是(2,)。 不匹配的维度。

np.append 是一个危险的函数,即使正确使用也没有那么有用。 np.concatenate (还有各种 stack)函数很有用。 但你需要注意形状。 而且不要反复使用它们。 列表追加对此更有效率。

当你得到这个错误的时候,你是否查到了 np.append, np.empty (和 np.concatenate)功能? 阅读并理解文档? 从长远来看,SO问题并不能代替阅读文档。


0
投票

正如你在错误中看到的,你的两个数组必须匹配相同的形状,x.shape返回(2,2),而array([1,2]).shape返回(2,),所以你要做的是

x = np.append(x, np.array([1,2]).reshape((1,2)), axis=0)

打印x返回 。

array([[1.966937e-316, 4.031792e-313],
   [0.000000e+000, 4.940656e-324],
   [1.000000e+000, 2.000000e+000]])
© www.soinside.com 2019 - 2024. All rights reserved.