如何创建一个充满空列表的新的numpy数组?

问题描述

我想生成一个空列表填充的numpy数组。我尝试过:

import numpy as np

arr=np.full(6,fill_value=[],dtype=object)

我得到一个错误

ValueError: Could not broadcast input array from shape (0) into shape (6)

但是如果我使用:

arr = np.empty(6,dtype=object)
arr.fill([])

没关系。为什么numpy.full在这里不起作用?初始化由空列表填充的数组的正确方法是什么?

解决方法

文档中隐藏了无法使用fill_value=[]的原因:

在文档中,它说np.fullfill_value参数是标量或类似数组的参数。在np.asarray的文档中,您可以找到它们对类似数组的定义:

输入数据,可以转换为数组的任何形式。这包括列表,元组列表,元组,元组元组,列表元组和ndarray。

因此,列表被特殊地视为“数组”填充类型,而不是标量,这不是您想要的。另外,arr.fill([])实际上不是您想要的,因为它将每个元素填充到相同列表中,这意味着将所有元素都追加到一个元素上。为了避免这种情况,您可以按照this answer的状态进行操作,只需使用列表初始化数组即可:

arr = np.empty(6,dtype=object)
arr[...] = [[] for _ in range(arr.shape[0])]

这将创建一个包含6个唯一列表的数组,因此追加到一个列表不会附加到所有列表。

,

您可以尝试使用numpy.empty(shape,dtype = float,order ='C')