栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何创建一个列表的numpy数组?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何创建一个列表的numpy数组?

如您所见,

np.array
在给出类似以下内容时,尝试创建2d数组

 A = np.array([[1,2],[3,4]],dtype=object)

您已应用了一些技巧来解决此默认行为。

一种是使子列表的长度可变。它不能从这些数组中生成2d数组,因此它求助于对象数组:

In [43]: A=np.array([[1,2],[],[1,2,3,4]])In [44]: AOut[44]: array([[1, 2], [], [1, 2, 3, 4]], dtype=object)

然后,您可以将值附加到每个列表中:

In [45]: for i in A: i.append(34)In [46]: AOut[46]: array([[1, 2, 34], [34], [1, 2, 3, 4, 34]], dtype=object)

np.empty
还创建一个对象数组:

In [47]: A=np.empty((3,),dtype=object)In [48]: AOut[48]: array([None, None, None], dtype=object)

但是随后您必须小心如何将元素更改为列表。

np.fill
很诱人,但存在问题:

In [49]: A.fill([])In [50]: AOut[50]: array([[], [], []], dtype=object)In [51]: for i in A: i.append(34)In [52]: AOut[52]: array([[34, 34, 34], [34, 34, 34], [34, 34, 34]], dtype=object)

事实证明,

fill
在所有插槽中都放置了相同的列表,因此修改一个列表会修改所有其他列表。您可以通过列表列表得到相同的问题:

In [53]: B=[[]]*3In [54]: BOut[54]: [[], [], []]In [55]: for i in B: i.append(34)In [56]: BOut[56]: [[34, 34, 34], [34, 34, 34], [34, 34, 34]]

初始化的正确方法

empty
A
是使用迭代,例如

In [65]: A=np.empty((3,),dtype=object)In [66]: for i,v in enumerate(A): A[i]=[v,i]In [67]: AOut[67]: array([[None, 0], [None, 1], [None, 2]], dtype=object)In [68]: for v in A: v.append(34)In [69]: AOut[69]: array([[None, 0, 34], [None, 1, 34], [None, 2, 34]], dtype=object)

从问题和注释中不清楚是要追加到列表还是追加列表到数组。我刚刚演示了追加到列表。

有一个

np.append
功能,新用户经常滥用。它不能替代列表追加。它是的前端
np.concatenate
。这不是就地操作;它返回一个新数组。

另外,定义要添加的列表可能很棘手:

In [72]: np.append(A,[[1,23]])Out[72]: array([[None, 0, 34], [None, 1, 34], [None, 2, 34], 1, 23],     dtype=object)

您需要构造另一个对象数组以连接到原始对象,例如

In [76]: np.append(A,np.empty((1,),dtype=object))Out[76]: array([[None, 0, 34], [None, 1, 34], [None, 2, 34], None], dtype=object)

在所有这些方面,列表数组比列表列表更难构建,并且操作起来也不容易,也没有更快。您必须使其成为2D列表数组才能获得一些好处。

In [78]: A[:,None]Out[78]: array([[[None, 0, 34]],       [[None, 1, 34]],       [[None, 2, 34]]], dtype=object)

您可以整形,转置等对象数组,在此过程中创建和处理列表列表会变得更加复杂。

In [79]: A[:,None].tolist()Out[79]: [[[None, 0, 34]], [[None, 1, 34]], [[None, 2, 34]]]

===

如所示,它

np.frompyfunc
是创建对象数组的好工具。

np.frompyfunc(list, 0, 1)(np.empty((3,2), dtype=object))


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/610662.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号