xtl*_*tlc 3 python arrays numpy python-2.7
我可能太愚蠢了,但我需要一个快速版本:
for i in range(0,4):
c.append((0,0,0))
out: [(0,0,0),(0,0,0),(0,0,0),(0,0,0)]
Run Code Online (Sandbox Code Playgroud)
我想zero filled tuple
在shape of (xL,)
x 中创建一个(0,0,0)'s
......我现在有三个有效的解决方案,它们都不包括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')])
Run Code Online (Sandbox Code Playgroud)
严格来说,这些不是元组 - 它只是将它们显示为元组。
但是要获得元组列表,只需使用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)]
Run Code Online (Sandbox Code Playgroud)
您可以使用生成的字符串概括元组长度 ','.join(['i']*3)
对于非结构化方法,我会使用
[tuple(x) for x in np.zeros((10,3),int)]
Run Code Online (Sandbox Code Playgroud)
在 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
Run Code Online (Sandbox Code Playgroud)
结构化数组转换为元组列表:
In [341]: timeit np.zeros((L,),dtype='i,i,i').tolist()
10 loops, best of 3: 73.6 ms per loop
Run Code Online (Sandbox Code Playgroud)
二维数组中的元组列表:
In [342]: timeit [tuple(x) for x in np.zeros((L,3),int)]
1 loops, best of 3: 223 ms per loop
Run Code Online (Sandbox Code Playgroud)
纯 python 元组列表:
In [343]: timeit [(0,0,0) for _ in range(L)]
100 loops, best of 3: 15.1 ms per loop
Run Code Online (Sandbox Code Playgroud)
元组的最佳列表 ( @swensel
):
In [344]: timeit [(0,0,0)]*L
1000 loops, best of 3: 429 µs per loop
Run Code Online (Sandbox Code Playgroud)
如果最终目标是元组列表,请坚持使用 Python。
如果目标是一个 numpy 结构化数组,直接去。
使用时要注意的一件事[(0,0,0)]*L
;这通过简单地复制指针来实现其速度。列表中的每个条目都指向同一个元组。对于可能存在严重问题的嵌套列表:
x = [[0,0,0]]*L
x[1][1] = 3
Run Code Online (Sandbox Code Playgroud)
更改每个子列表。对于元组,这不是什么大问题,因为它们是不可变的。
归档时间: |
|
查看次数: |
9291 次 |
最近记录: |