numpy - 在'accepts'附加的of中,python 如何制作空列表的网格?

  显示原文与译文双语对照的内容
76 2

我正在试图使用 numpy.append,但是有些错误,它不再是我的意思了。 谁能解释我为什么会出错?


>>> np.array([[], [], []]).shape


(3, 0)



>>> a=[[], [], []]


>>> a[1].append(3)


>>> a


[[], [3], []]



>>> b=np.array(a)


>>> b[0].append(3)


array([[3], [3], []], dtype=object)



这对我来说都是合理的,但当我尝试了之后,。


>>> c=np.array((3,0),dtype=object)


>>> c[0].append(3)


AttributeError: 'int' object has no attribute 'append'



????


>>> np.empty((3,1))[0].append(3)


AttributeError: 'numpy.ndarray' object has no attribute 'append'



>>> np.empty((3,0))[1].append(3)


AttributeError: 'numpy.ndarray' object has no attribute 'append'



>>>np.empty((6,1),dtype=object)[0].append(3)


AttributeError: 'numpy.ndarray' object has no attribute 'append'



解决方法:如何创建列表的numpy array

时间: 原作者:

76 5

不要只看这个形状;检查 of,如果对象,元素的性质。


In [282]: np.array([[], [], []])


Out[282]: array([], shape=(3, 0), dtype=float64)



2d array 浮点数。 np.array 试图制作一个多维数字的array ;它只是当它不能做到对象 array的时候。


In [283]: b=np.array([[],[3],[]])


In [284]: b


Out[284]: array([[], [3], []], dtype=object)



这里 3个子列表大小不同,因这里它不能制作 2d 个 array ;结果是对象 array,它的中包含了跟踪方法。


In [286]: c=np.array((3,0), object)


In [287]: c


Out[287]: array([3, 0], dtype=object)



这是( 2 ) 对象 array ;2元素是数字。 数字没有追加方法。


In [288]: np.empty((3,1))


Out[288]: 


array([[ 0.],


 [ 0.],


 [ 0.]])



浮点数的( 3,1 ) array 。 数字或者数组没有附加方法。


In [289]: np.empty((3,0))


Out[289]: array([], shape=(3, 0), dtype=float64)



另 2d 个 array


In [290]: np.empty((6,1),object)


Out[290]: 


array([[None],


 [None],


 [None],


 [None],


 [None],


 [None]], dtype=object)



dtype对象的二维 array 。 在这种情况下,它们被初始化为 None 。 再次无追加方法。

更多关于创建列表的array

numpy 数组 array的维数

如何使numpy在创建不同形状数组的对象 array 时不广播。


In [305]: d=np.empty((3,),object)


In [306]: d


Out[306]: array([None, None, None], dtype=object)


In [307]: d.fill([])


In [308]: d


Out[308]: array([[], [], []], dtype=object) # array of lists


In [309]: d[0].append([1,2,3])


In [310]: d


Out[310]: array([[[1, 2, 3]], [[1, 2, 3]], [[1, 2, 3]]], dtype=object)



但是这些列表都是相同的对象( 指针): ( 我必须在每个元素中放置一个不同的列表。 现在我可以单独向他们追加。


In [311]: d[...]=[[],[1,2,3],[2]]


In [312]: d


Out[312]: array([[], [1, 2, 3], [2]], dtype=object)


In [313]: d[0].append([2,3])


In [314]: d


Out[314]: array([[[2, 3]], [1, 2, 3], [2]], dtype=object)



我认为你必须咬住子项目符号并使用列表初始化列表的对象 array 。 没有捷径:


In [319]: d=np.empty((3,),object)


In [320]: d[...]=[[] for _ in range(3)]


In [321]: d


Out[321]: array([[], [], []], dtype=object)


In [323]: d


Out[323]: array([[], [3], []], dtype=object)



原作者:
133 2

首先,当有人正确回答你的问题时,不要再更新你的问题。 接受/upvote回答,当你准备好时再问一个新问题。 q&是一个网站,旨在帮助未来访问者查看你的问题,而不仅仅是你。 将上下文完全改变为你自己的好处,使所有好答案失效。

其次,np.array([[], [3], []])dtype=object 结尾,因为它是一个不规则的array 。 [[], [], []][[3], [3], [3]],在所有维度的所有元素中都具有统一长度,将产生数字阵列。

np.zeros((6,),dtype=object) 生成一个对象引用的空 array ( 包含空值) 。 使用 [] 填充时,你将用对它的引用填充它,在每个元素中都是相同的。 numpy 不知道你要传递给 ndarray.fill的对象,因这里它不会在你期望的list 类型上调用构造函数。 它只复制你在六次传递的引用。 之后,应该清楚为什么更改一个列表的内容使得所有 array 元素都变了。

原作者:
...