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

时间:原作者:0个回答

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 元素都变了。

原作者:
...