我想用numpy实现FIFO方法。具体来说,我有一个numpy数组STOCK
,如下所示
import numpy
numpy.random.seed(1)
STOCK = numpy.random.randint(1, 9, size=(10_000, 10))
STOCK = array([
[6, 4, 5, ..., 6, 8, 1],
[1, 2, 5, ..., 2, 3, 5],
[7, 6, 3, ..., 5, 6, 7],
...,
[2, 5, 8, ..., 7, 6, 1],
[2, 8, 7, ..., 2, 8, 4],
[1, 2, 6, ..., 1, 1, 3]])
,其中每行表示不同的产品类别,每列表示在特定日期购买的商品数量。你知道吗
现在,我有第二个数组SOLD
,看起来像这样
SOLD = numpy.random.randint(1, 9, size=10_000)
SOLD = array([1, 7, 3, ..., 6, 8, 5])
其中每个数字代表每个类别销售的产品数量。你知道吗
现在我想用FIFO方法更新STOCK
数组。意思是,我想预订每个产品类别的前n个累计元素。在上面的例子中,输出应该是
UPDATED_STOCK= array([
[5, 4, 5, ..., 6, 8, 1], # 6-1, 4, 5, ... BOOKED OUT=1
[0, 0, 1, ..., 2, 3, 5], # 1-1, 2-2, 5-4, ... BOOKED OUT=7
[4, 6, 3, ..., 5, 6, 7], # 7-3, 6, 3, ... BOOKED OUT=3
...,
[0, 1, 8, ..., 7, 6, 1], # 2-2, 5-4, 8, ... BOOKED OUT=6
[0, 2, 7, ..., 2, 8, 4], # 2-2, 8-6, 7, ... BOOKED OUT=8
[0, 0, 4, ..., 1, 1, 3]]) # 1-1, 2-2, 6-2, ... BOOKED OUT=5
然而,我不确定如何解决这个问题。有什么想法吗?你知道吗
我希望这是合适的。你知道吗
更新:我找到了一个非常快速的解决方案(类似于Mstaino的解决方案)
更简洁的方式,使用
cumsum
:基本上,对数组进行累加求和,取出
out
,在0处剪裁并求和。这将重现类似FIFO的过程。它是矢量化的。你知道吗相关问题 更多 >
编程相关推荐