在Python中比较关系矩阵并取最小值的向量化矩阵计算
矩阵 我想创建一个矢量化方法(numpy),使用矩阵“qtyC”和“rel”的输入填充/计算名为“qtyP”的矩阵。在for循环中求解是很容易的,但我想用一种更聪明的方式来解决。首先,我将描述我的矩阵 产品与周矩阵(最终结果) 容量与周矩阵在Python中比较关系矩阵并取最小值的向量化矩阵计算,python,numpy,Python,Numpy,矩阵 我想创建一个矢量化方法(numpy),使用矩阵“qtyC”和“rel”的输入填充/计算名为“qtyP”的矩阵。在for循环中求解是很容易的,但我想用一种更聪明的方式来解决。首先,我将描述我的矩阵 产品与周矩阵(最终结果) 容量与周矩阵 # This matrix (5x6) describes how much of each capacity is available per week # Rows: Capacities (5) # Columns: Weeks (6) qtyC =
# This matrix (5x6) describes how much of each capacity is available per week
# Rows: Capacities (5)
# Columns: Weeks (6)
qtyC = [[0,0,17,68,133,180],
[0,0,75,154,213,250],
[0,0,39,11,34,100],
[0,0,357,648,861,1531],
[0,3,0,10,22,53]]
qtyC = np.matrix(qtyC)
# This matrix (5x5) details the relationship between "Products" and "Capacities".
# If there is a 1 then that capacity is needed for the product
# e.g. capacity 5 is need for product 1
# e.g. capacity 2 and 4 is needed for product 2
# Rows: Products (5)
# Columns: Capacities (5)
rel = [[0,0,0,0,1],
[0,1,0,1,0],
[0,1,0,1,0],
[0,1,0,1,0],
[1,0,0,1,0]]
rel = np.matrix(rel)
产品与产能关系矩阵
# This matrix (5x6) describes how much of each capacity is available per week
# Rows: Capacities (5)
# Columns: Weeks (6)
qtyC = [[0,0,17,68,133,180],
[0,0,75,154,213,250],
[0,0,39,11,34,100],
[0,0,357,648,861,1531],
[0,3,0,10,22,53]]
qtyC = np.matrix(qtyC)
# This matrix (5x5) details the relationship between "Products" and "Capacities".
# If there is a 1 then that capacity is needed for the product
# e.g. capacity 5 is need for product 1
# e.g. capacity 2 and 4 is needed for product 2
# Rows: Products (5)
# Columns: Capacities (5)
rel = [[0,0,0,0,1],
[0,1,0,1,0],
[0,1,0,1,0],
[0,1,0,1,0],
[1,0,0,1,0]]
rel = np.matrix(rel)
如何获得最终结果
# This is the desired end-result matrix (5x6)
# It describes how much of each product is available per week
# Rows: Products (5)
# Columns: Weeks (6)
qtyP = [[0,3,0,10,22,53],
[0,0,75,154,213,250],
[0,0,75,154,213,250],
[0,0,75,154,213,250],
[0,0,17,68,133,180]]
qtyP = np.matrix(qtyP)
我将解释如何使用for循环来实现这一点,以便更好地解释它
qtyP = qtyC[rel[np.newaxis,:] != 0]
编辑-根据评论更改我的答案 IIUC,这是你能做的-
(6,5,5)
张量和广播
。对于每个周(6)
,对于每个产品(5)
获取与rel行(5)
对应值的乘积轴=-1上取最小值,以获得(6,5)
矩阵
masked_数组
来屏蔽0
值,然后在轴=-1上找到最小值
填充
如果返回屏蔽值,则通过0和转置
得到一个(5,6)矩阵一定要检查并让我知道这是否能处理您的边缘案例。编辑-根据评论更改我的答案 IIUC,这是你能做的-
(6,5,5)
张量和广播
。对于每个周(6)
,对于每个产品(5)
获取与rel行(5)
对应值的乘积轴=-1上取最小值,以获得(6,5)
矩阵
masked_数组
来屏蔽0
值,然后在轴=-1上找到最小值
填充
如果返回屏蔽值,则通过0和转置
得到一个(5,6)矩阵一定要检查并让我知道这是否能处理您的边缘案例。感谢您的评论和建议方法。您的建议似乎适用于此处给出的数字,但是,当我在中减少
qtyC
中的容量时,例如,将1531减至10,则建议的方法会导致错误的矩阵答案。我认为我没有正确地阅读rel正在做的事情。你能解释一下rel是什么吗?每行单独?我用标题“产品与容量关系矩阵”详细描述了代码块中的rel。每一行都是一个产品,描述了它需要的列容量。因此,产品1仅具有5号容量,而产品2具有2号和4号容量。这意味着每周需要检查每个产品的最小容量,以了解可以构建多少。因此,对于第4周的产品2,我们有154的容量2和648的容量4,这两个最小值是154,可以用产品2构建。生产的产品数量为:qtyP(2,4)=min[qtyC(2,4),qtyC(4,4)]
ohhh其产能数量?这是索引吗?明白了,看来效果不错!将测试更多的数字,但到目前为止,在不同的情况下效果良好。非常感谢您的时间和回复!感谢您的评论和建议方法。您的建议似乎适用于此处给出的数字,但是,当我在中减少qtyC
中的容量时,例如,将1531减至10,则建议的方法会导致错误的矩阵答案。我认为我没有正确地阅读rel正在做的事情。你能解释一下rel是什么吗?每行单独?我用标题“产品与容量关系矩阵”详细描述了代码块中的rel。每一行都是一个产品,描述了它需要的列容量。因此,产品1仅具有5号容量,而产品2具有2号和4号容量。这意味着每周需要检查每个产品的最小容量,以了解可以构建多少。因此,对于第4周的产品2,我们有154的容量2和648的容量4,这两个最小值是154,可以用产品2构建。生产的产品数量为:qtyP(2,4)=min[qtyC(2,4),qtyC(4,4)]
ohhh其产能数量?这是索引吗?明白了,看来效果不错!将测试更多的数字,但到目前为止,在不同的情况下效果良好。谢谢