gpt4 book ai didi

python - 使用 np.zero 创建元组

转载 作者:太空宇宙 更新时间:2023-11-03 12:32:09 24 4
gpt4 key购买 nike

我可能太笨了,但我需要一个快速的版本:

for i in range(0,4):
c.append((0,0,0))

out: [(0,0,0),(0,0,0),(0,0,0),(0,0,0)]

我想在 shape of (xL,) 中创建一个 zero filled tuple,其中 x 是 ( 0,0,0) 的 ...我现在有三个可行的解决方案,它们都不包括 np.zero

最佳答案

你可以走结构化数组路线:

In [304]: np.zeros((10,),dtype='i,i,i')
Out[304]:
array([(0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
(0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)],
dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<i4')])

严格来说,这些不是元组 - 它只是将它们显示为元组。

但要获取元组列表,只需使用tolist:

In [305]: np.zeros((10,),dtype='i,i,i').tolist()
Out[305]:
[(0, 0, 0),
(0, 0, 0),
(0, 0, 0),
...
(0, 0, 0),
(0, 0, 0),
(0, 0, 0)]

您可以使用 ','.join(['i']*3) 生成的字符串概括元组长度

对于非结构化方法,我会使用

[tuple(x) for x in np.zeros((10,3),int)]

在 Python3 中(尤其是)我更喜欢列表理解而不是等效的映射:list(map(tuple, np.zeros((10,3),int)))

一些时间(L=10**5):

结构化数组:

In [340]: timeit np.zeros((L,),dtype='i,i,i')
10000 loops, best of 3: 77.5 µs per loop

转换为元组列表的结构化数组:

In [341]: timeit np.zeros((L,),dtype='i,i,i').tolist()
10 loops, best of 3: 73.6 ms per loop

二维数组中的元组列表:

In [342]: timeit [tuple(x) for x in np.zeros((L,3),int)]
1 loops, best of 3: 223 ms per loop

元组的纯 python 列表:

In [343]: timeit [(0,0,0) for _ in range(L)]
100 loops, best of 3: 15.1 ms per loop

最佳元组列表(@swensel):

In [344]: timeit [(0,0,0)]*L
1000 loops, best of 3: 429 µs per loop

如果最终目标是元组列表,请坚持使用 Python。

如果目标是 numpy 结构化数组,直接进行。


使用[(0,0,0)]*L时需要注意的一件事;这通过简单地复制指针来实现它的速度。列表中的每个条目都指向同一个元组。嵌套列表可能会出现严重问题:

x = [[0,0,0]]*L
x[1][1] = 3

改变每个子列表。对于元组,这不是什么大问题,因为它们是不可变的。

关于python - 使用 np.zero 创建元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32561598/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com