下面是一些timeit代码,比较了将2D Python小整数列表转换为1D Numpy数组的3种不同方法的速度。在
直接的方法是简单地将整个列表传递给Numpy的array函数,然后通过其.flatten方法将生成的2D数组展平为1D。这是grid_to_array采用的方法。在
我测试的其他方法都使用numpy.append函数。grid_rows_to_array逐行生成数组,grid_items_to_array逐项构建它。正如您所猜测的,最后一种方法非常缓慢。即使是10x10的列表,它也比grid_to_array慢50倍左右。对于更大的列表来说,它的速度真的很慢。在#!/usr/bin/env python3
''' Compare the speeds of various functions that convert a
2D integer list to a 1D Numpy array.
See https://stackoverflow.com/q/44512661/4014959
Written by PM 2Ring 2017.06.13
'''
import numpy as np
from timeit import Timer
def make_grid(n):
''' Make a 2D list of integers '''
return [list(range(i, i + n)) for i in range(0, n * n, n)]
# The functions to test
def grid_to_array(g):
''' Create a 2D array from t