将值列表赋给numpy数组
假设我们有一个二维的 numpy
数组,它的形状是 (10000, 100)
,也就是说它有10000行和100列,总共有 1000000
个元素。同时,还有一个长度为 1000000
的一维 list
列表。现在,问题是把这个列表里的所有值快速地赋值给这个数组。我的解决方案是:
my_array = np.zeros([10000, 100])
my_list = range(1000000)
length_of_list = len(my_list)
for i in range(length_of_list):
my_array.flat[i] = my_list[i]
有没有可能有更好的方法呢?
1 个回答
3
我原以为把列表转换成数组,然后再调整形状会是最快的解决办法,但结果发现,在我的环境下,@M4rtini 的一行代码反而更快:
In [25]: %%timeit -n 10
....: for i in range(length_of_list):
....: my_array.flat[i] = my_list[i]
....:
10 loops, best of 3: 420 ms per loop
In [26]: %timeit -n 10 my_array.flat[:] = my_list
10 loops, best of 3: 119 ms per loop
In [27]: %timeit -n 10 my_array = np.array(my_list).reshape(10000, 100)
10 loops, best of 3: 133 ms per loop