您好,在不使用循环的情况下,可以执行下面的代码更快更简单吗?当增加乘数时,计算将非常耗时。
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))
答案 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
。