在数组计算中替换numpy数组循环

时间:2018-06-21 07:58:08

标签: arrays loops numpy

您好,在不使用循环的情况下,可以执行下面的代码更快更简单吗?当增加乘数时,计算将非常耗时。

import numpy as np
import random
import timeit

multiplier = 2
vectors_number = 4 * multiplier
variable_number = 6
input_matrix = np.random.uniform(-5, 5, (vectors_number, variable_number))

offset = np.arange(multiplier)[:, None]*4
winning_matrix = np.random.rand(multiplier, 4).argsort(1)[:, :4] + offset

out_matrix = np.zeros(shape=(multiplier, variable_number))
start = timeit.default_timer()

for i in range(winning_matrix.shape[0]):
    for k in range(variable_number):
        out_matrix[i][k] = input_matrix[winning_matrix[i][2]][k] - 
                           input_matrix[winning_matrix[i][1]][k]

end = timeit.default_timer()
print('Computation time %f' % (end - start))

1 个答案:

答案 0 :(得分:0)

怎么样

out_matrix = input_matrix[winning_matrix[...,2]] - input_matrix[winning_matrix[...,1]]

使用

multiplier = 200
vectors_number = 4 * multiplier
variable_number = 6000

我知道

  

计算时间1.576242

表示原始方法,

  

计算时间0.027881

上面的代码。因此,速度提高了约140。

请注意,您也可以摆脱分配和初始化步骤:

out_matrix = np.zeros(shape=(multiplier, variable_number))

因为现在为您创建了out_matrix