【问题标题】:replace numpy array loop in array calculations在数组计算中替换 numpy 数组循环
【发布时间】:2018-06-21 07:58:07
【问题描述】:

您好,在不使用循环的情况下,是否有更快、更简单的选项来执行以下代码?当增加乘数值时,计算时间很长。

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))

【问题讨论】:

    标签: arrays loops numpy


    【解决方案1】:

    怎么样

    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 现已为您创建。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-08
      • 2017-03-14
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 2023-03-16
      相关资源
      最近更新 更多