快速将大型列表列表与Python中的另一个列表相乘的方法

时间:2017-06-24 06:10:11

标签: python-3.x numpy

  1. 我正在尝试找到一组给我最大值w,x,y,z的值 值 L 使得w + x + y + z = 1。
  2. 首先,我将x,w,y和z的所有可能组合带入 列出,然后我将每组组合相乘 probList。
  3. 获取每个probList列表的总和并将其相乘 附加到L.然后L被排序以找到最高值。这是我的代码:

    [[  1.0  1.0   8.6   1.7]
     [  5.0   5.0   5.0   8.8] 
     [  1.0   1.0   1.0   2.6] 
     ...,   
     [  1.0   1.0   8.3  ]
     [  1.0   1.0   5.3   1.8]
     [  1.0   5.0   4.6   7.]]
    
  4. 这似乎需要花费很多时间,因为len(probList)是

      

    103665

    probList的结构是(103665 x 4),看起来像这样:

    [ 0.    0.01  0.02  0.03  0.04  0.05  0.06  0.07  0.08  0.09  0.1   0.11
      0.12  0.13  0.14  0.15  0.16  0.17  0.18  0.19  0.2   0.21  0.22  0.23
      ......
      0.84  0.85  0.86  0.87  0.88  0.89  0.9   0.91  0.92  0.93  0.94  0.95
      0.96  0.97  0.98  0.99]
    

    w_dim,x_dim,z_dim的结构是:

     [[0.0, 0.0, 0.0, 1.0],
     [0.0, 0.0, 0.01, 0.98999999999999999],
     [0.0, 0.0, 0.02, 0.97999999999999998],
     [0.0, 0.0, 0.029999999999999999, 0.96999999999999997], 
     [0.0, 0.0, 0.040000000000000001, 0.95999999999999996]
     [.....
     [0.96999999999999997, 0.02, 0.0, 0.010000000000000009], 
     [0.97999999999999998, 0.0, 0.0, 0.020000000000000018], 
     [0.97999999999999998, 0.0, 0.01, 0.010000000000000009], 
     [0.97999999999999998, 0.01, 0.0, 0.010000000000000009], 
     [0.98999999999999999, 0.0, 0.0, 0.010000000000000009]]
    

    值的结构是:

    flight_schedule_detail_instance = FlightScheduleDetail.objects.filter
                schedule_id=FlightSchedule.objects.filter(schedule_id=instance.schedule_id),
                flight_date=str(tomorrow_date)
                )
    

    请建议我采用更优化的方法。

1 个答案:

答案 0 :(得分:0)

为什么不使用矩阵点?

w_dim=np.arange(0.0, 1.0, 0.01).reshape(-1,1)
x_dim=np.arange(0.0, 1.0, 0.01).reshape(-1,1)
y_dim=np.arange(0.0, 1.0, 0.01).reshape(-1,1)
W = np.concatenate([w_dim, x_dim, y_dim], axis=1)
z = np.maximum(1 - np.sum(W, axis=1, keepdims=True), 0)

params = np.concatenate([W,z], axis=1)
result = probList * params

result_sum = np.sum(result, axis=1)
idx = result_sum.argsort()[::-1]
output = result[idx,:]