【问题标题】:Numpy Array of ListsNumpy 列表数组
【发布时间】:2016-08-04 05:14:58
【问题描述】:

我想创建一个 Numpy 数组,其中包含两个(Python-)列表。当我尝试将一个元素附加到这些列表之一时,代码会崩溃。

import numpy as np
list0 = [0,0,0]
list1 = [1,1,1]
#list1.append(0)
print(type(list0))
print(type(list1))
array0 = np.array((list0, list1))
array0[0].append(42)
print(array0)    

令人困惑的是,当我取消注释第 4 行时,代码运行良好。

我得到的错误信息:

File "test.py", line 10, in <module>
array0[0].append(3)
AttributeError: 'numpy.ndarray' object has no attribute 'append'

我在 python 3.5.1 和 numpy 1.10.4 上运行

【问题讨论】:

  • 我刚刚发现np.array(((0,0,0),(1,1,1))) 试图创建一个二维数组。如果两个列表(例如(0,0,0)(1,1,1))具有不同的大小(例如(0,0)(1,1,1)),则不会发生这种情况。用两个空列表初始化数组的一种方法是写array0 = np.empty(2, dtype=np.object)array0[:] = [], []
  • 是的,np.array 默认创建一个多维数组。制作对象 dtype 是第二类备份选择。使用普通列表可能会更好,甚至更快。

标签: arrays list python-3.x numpy append


【解决方案1】:

使用 numpy 的堆栈函数怎么样?您可以使用vstack(垂直堆栈)和hstack(水平堆栈)将列表/数组附加在一起。然后,您还可以继续将更多列表/数组堆叠到新创建的堆栈上。下面我举三个例子。

Python(保存在文件 stackingArrays 中)

import numpy as np

list0 = [0,0,0]
list1 = [1,1,1]

# stack vertically
array_v=np.vstack((list0,list1))
print array_v

# stack horizontally
array_h=np.hstack((list0,list1))
print array_h

# stack more on to stacked array
array_v2=np.vstack((array_v,list1))
print array_v2

输出

> python -i stackingArrays.py
>>> [[0 0 0]
    [1 1 1]]
>>> [0 0 0 1 1 1]
>>> [[0 0 0]
    [1 1 1]
    [1 1 1]]

【讨论】:

    【解决方案2】:

    两个列表的大小相同,这就是它成为二维 np 数组的原因。

    因此,您正试图将一个值附加到 np 数组的其中一行(您不能这样做,因为它不再是一个列表)。

    我建议您使用 np 列表数组,如 here 所示。

    祝你好运;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 2017-03-08
      • 2012-05-07
      • 2017-12-23
      • 2019-08-30
      • 1970-01-01
      相关资源
      最近更新 更多