我正在创建这个数组:
A=itertools.combinations(range(6),2)
我需要使用numpy操作这个数组,例如:
A.reshape(..
如果维度A很高,命令list(A)
会非常慢。
我如何将itertools数组“转换”为numpy数组?
更新1: 我已经尝试了hpaulj的解决方案,在这种特定情况下略微慢一些,有什么想法吗?
start=time.clock()
A=it.combinations(range(495),3)
A=np.array(list(A))
print A
stop=time.clock()
print stop-start
start=time.clock()
A=np.fromiter(it.chain(*it.combinations(range(495),3)),dtype=int).reshape (-1,3)
print A
stop=time.clock()
print stop-start
结果:
[[ 0 1 2]
[ 0 1 3]
[ 0 1 4]
...,
[491 492 494]
[491 493 494]
[492 493 494]]
10.323822
[[ 0 1 2]
[ 0 1 3]
[ 0 1 4]
...,
[491 492 494]
[491 493 494]
[492 493 494]]
12.289898
import numpy as np def generate_numbers(): for i in range(10): yield i arr = np.fromiter(generate_numbers(), dtype=np.int) print(arr)
输出:array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
在这个例子中,我们定义了一个生成器generate_numbers(),它生成0到9的整数。然后,我们使用NumPy的fromiter函数将生成器转换为一个整数类型的NumPy数组。最后,我们打印出这个数组的值。 - postelrichitertools.combinations
函数会立即返回,因为它实际上并不提前创建任何组合,而是一个生成器。 - Blckknght