我有 3 個商品。例如,我收到了 60 個蛋糕訂單。我需要先發貨/發貨最早的一批。看了一下“包子”商品。我需要腳本來生成這個調度列。這里的邏輯是每個商品的發貨列的總和不應超過收到的訂單。我附上了圖片。

uj5u.com熱心網友回復:
這不是解決方案,因為我不太了解熊貓。
為此,最好使用訂單和批次的累積值。然后取兩個陣列之間每個交集的批次和訂單累積量的最小值。
下面是一個 numpy 腳本,也許它會有助于激發熊貓的靈感。
import numpy as np
orders = np.array( [10, 20, 15, 25] )
cum_orders = orders.cumsum()
batches = np.array( [ 20, 20, 20, 20 ] )
cum_batches = batches.cumsum()
temp = np.minimum( cum_batches[:, None], cum_orders[ None, : ] )
cum_orders, temp
# Orders: array([10, 30, 45, 70]), # cum_batches
# temp: array([[10, 20, 20, 20], # [ 20,
# [10, 30, 40, 40], # 40,
# [10, 30, 45, 60], # 60,
# [10, 30, 45, 70]])) # 80 ]
inter = np.diff( temp, prepend = 0, axis = 1 ) # Decum across columns.
np.diff( inter, prepend = 0, axis = 0 ) # Decum down the rows.
# orders [10, 20, 15, 25] # Batches
# array([[10, 10, 0, 0], # [ 20,
# [ 0, 10, 10, 0], # 20,
# [ 0, 0, 5, 15], # 20,
# [ 0, 0, 0, 10]]) # 20 ]
要獲得 LIFO(后進先出),批次需要在陣列中的舊批次之前使用最新批次。可以在熊貓中安排等價物嗎?
對于“bun”示例資料,如果只有一個訂單,則進行簡化。
batches = np.array( [ 15, 5, 25, 10, 5 ] )
cum_batches = batches.cumsum()
inter = np.minimum( cum_batches, 50 )
inter
# array([15, 20, 45, 50, 50])
np.diff( inter, prepend = 0 )
# array([15, 5, 25, 5, 0])
假設兩個訂單 [ 30, 20 ]
orders = np.array( [ 30, 20 ] )
cum_orders = orders.cumsum()
batches = np.array( [ 15, 5, 25, 10, 5 ] )
cum_batches = batches.cumsum()
temp = np.minimum( cum_batches[:, None], cum_orders[ None, : ] )
# batches to rows, orders to columns
inter = np.diff( temp, prepend = 0, axis = 1 ) # Decum across columns.
np.diff( inter, prepend = 0, axis = 0 ) # Decum down the rows.
# array([[15, 0],
# [ 5, 0],
# [10, 15],
# [ 0, 5],
# [ 0, 0]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/372136.html
