为了账号安全,请及时绑定邮箱和手机立即绑定

从元组列表构建 numpy 数组

从元组列表构建 numpy 数组

德玛西亚99 2021-08-14 17:08:53
我想将元组列表转换为 numpy 数组。例如:items = [(1, 2), (3, 4)]使用np.asarray(items)我得到:array([[1, 2],       [3, 4]])但如果我尝试单独附加项目:new_array = np.empty(0)for item in items:    new_array = np.append(new_array, item)在new_array失去原来的形状,并成为:array([1., 2., 3., 4.])我可以把它变成我想要的形状new_array.reshape(2, 2):array([[1., 2.],       [3., 4.]])但是我如何在不重塑的情况下获得这种形状?
查看完整描述

2 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

首先,您需要为数组提供正确的形状,以便numpy了解如何解释提供给append方法的值。


然后,为防止自动展平,请指定要附加的轴。


此代码执行您打算执行的操作:


import numpy as np


items = [(1,2),(3,4)]


new_array = np.ndarray((0,2))

for item in items:

    new_array = np.append(new_array, [item], axis=0)


print(new_array) # [[1. 2.]

                 #  [3. 4.]]


查看完整回答
反对 回复 2021-08-14
?
精慕HU

TA贡献1845条经验 获得超8个赞

如果您有一个元组列表,并且出于某种原因决定讨厌标准数组构造函数(np.array,np.asarray等,正如@JohnZwinck 指出的那样可能是最好的答案),最有效的方法是预先分配整个数组,然后分配给它:


items = [(1, 2), (3, 4)]

arr = np.empty((len(items), len(items[0])))


arr[...] = items

即使你想要的是随着时间的推移增长的数组,一行接一行,它已被证明通过详细的时机,你通常最好是关闭只是分配一个全新的数组,然后复制了旧值。


因此,鉴于上述情况arr,通过这种方法追加一行的最有效方法是:


newitem = (5, 6)

oldarr = arr

arr = np.empty((oldarr.shape[0] + 1, *oldarr.shape[1:]))


arr[:-1,:] = oldarr

arr[-1,:] = newitem


查看完整回答
反对 回复 2021-08-14
  • 2 回答
  • 0 关注
  • 201 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号