此代码在python3.6.4中运行
matrix_n = []
for i in matrix:
matrix_n.append(np.dstack(i))
#method1
for index, a in enumerate(matrix_n):
for row in range(100):
for column in range(100):
cell_arr = a[row][column]
conn.execute("INSERT INTO DISTRIBUTIONS VALUES (?,?,?,?,?,?)", [index, row, column, np.mean(cell_arr), np.std(cell_arr), str(cell_arr)]);
#method2
for index, a in enumerate(matrix):
for row in range(100):
for column in range(100):
cell_arr = []
for b in range(len(a)):
cell_arr.append(a[b][row][column])
conn.execute("INSERT INTO DISTRIBUTIONS VALUES (?,?,?,?,?,?)", [index, row, column, np.mean(cell_arr), np.std(cell_arr), str(cell_arr)]);
由于某种原因,method2的速度大约是method1的两倍。 matrix_n的初始构建运行两次,因此在速度方面是非因素。
如果有人能够解释为什么for循环比直接访问数组要快得多。 作为参考,matrix_n的形状是(48,100,100,30),矩阵的形状是(48,30,100,100),所以在第二种方法中我只是简单地从第二维和第一种方法构建数组数组已经构建完毕。