python集合变成数组_可以向python集合添加numpy数组吗?

首先创建一些数据:import numpy as np

np.random.seed(1)

list_of_np_1D = np.random.randint(0, 5, size=(500, 6))

np_2D = np.random.randint(0, 5, size=(20, 6))

运行代码:

^{pr2}$

输出:CPU times: user 161 ms, sys: 2 ms, total: 163 ms

Wall time: 167 ms

这是一个加速版本,它使用broadcast,.view()方法将数据类型转换为字符串,调用set()将字符串转换回数组:%%time

r = list_of_np_1D[:, None, :] + np_2D[None, :, :]

stype = "S%d" % (r.itemsize * np_2D.shape[1])

fill_set2 = set(r.ravel().view(stype).tolist())

res2 = np.zeros(len(fill_set2), dtype=stype)

res2[:] = list(fill_set2)

res2 = res2.view(r.dtype).reshape(-1, np_2D.shape[1])

输出:CPU times: user 13 ms, sys: 1 ms, total: 14 ms

Wall time: 14.6 ms

检查结果:np.all(res1[np.lexsort(res1.T), :] == res2[np.lexsort(res2.T), :])

您还可以使用lexsort()删除重复数据:%%time

r = list_of_np_1D[:, None, :] + np_2D[None, :, :]

r = r.reshape(-1, r.shape[-1])

r = r[np.lexsort(r.T)]

idx = np.where(np.all(np.diff(r, axis=0) == 0, axis=1))[0] + 1

res3 = np.delete(r, idx, axis=0)

输出:CPU times: user 13 ms, sys: 3 ms, total: 16 ms

Wall time: 16.1 ms

检查结果:np.all(res1[np.lexsort(res1.T), :] == res3)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值