问题描述
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.full
的fill_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')