Python 使用Numpy和while循环生成所有可能的加法组合
我正在尝试从2个基本数组构建一个N维数组,该数组显示所有可能的组合,以添加所有值,从而:Python 使用Numpy和while循环生成所有可能的加法组合,python,loops,numpy,while-loop,Python,Loops,Numpy,While Loop,我正在尝试从2个基本数组构建一个N维数组,该数组显示所有可能的组合,以添加所有值,从而: Array A = [N0, N1, N2, ... , Nn] Array B = [M0, M1, M2, ..., Mn] Combinations = [[N0+M0, N0 + M1, ..., N0+Mn], [N1+M0, N1 + M1, ..., N1 + Mn], . .
Array A = [N0, N1, N2, ... , Nn]
Array B = [M0, M1, M2, ..., Mn]
Combinations = [[N0+M0, N0 + M1, ..., N0+Mn],
[N1+M0, N1 + M1, ..., N1 + Mn],
.
.
.,
]
我知道我可以使用笛卡尔乘积来找到所有可能的组合(我不关心重复),但是我不需要所有值的乘积,我需要加法。我似乎无法获得我编码的while循环,以便能够在生成新数据时追加行(代码如下)
将numpy导入为np
MassFlowOx=np.linspace(0.1103150)*10**-3
MassFlowFuel=np.linspace(0.1,75150)*10**-3
尺寸=长度(质量流量燃料)
尺寸\最终=尺寸**2
MassFlowComb=np.零(大小)
温度=np.零(大小,数据类型=浮点)
i=0
j=0
MassFlowCombArray=np.零(大小)
#运行所有可能的组合以在数组中添加值
而i您所需要的已经在NumPy中实现,称为np.add.outer
。如果您想计算差异,只需将add
替换为subtract
。如果您想购买产品,只需使用outer
。对于Nx1
和Mx1
数组,结果将是维度NxM
下面是一个简单的例子:
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
np.add.outer(a, b)
为什么不直接用double for loop呢
import numpy as np
MassFlowOx = np.linspace(0.1,103,150)*10**-3
MassFlowFuel = np.linspace(0.1,75,150)*10**-3
MassFlowComb = []
for a in MassFlowOx:
for b in MassFlowFuel:
MassFlowComb.append(a+b)
MassFlowComb = np.array(MassFlowComb)
对于这种情况,创建For循环比创建While循环更好。您的代码可以非常简单,如下所示:
import numpy as np
MassFlowOx = np.linspace(0.1,103,150)*10**-3
MassFlowFuel = np.linspace(0.1,75,150)*10**-3
MassFlowComb = []
for Fo in MassFlowOx:
sub_list = []
for Ff in MassFlowFuel:
sub_list.append(Fo+Ff)
MassFlowComb.append(sub_list)
print(np.asarray(MassFlowComb))
请注意,我使用了一个列表来追加总和,但您可以使用numpy来完成此操作。快速回答是:我是一个乞丐编码器:/谢谢您的回复,我会看看是否可以实现它!谢谢你的回复!这似乎是我问题的答案!我是一个乞丐,我倾向于在文档中迷失方向。我将检查这是否会产生可用的数组格式!我刚意识到你不用转置也很好。检查你的最终答案,我相信它会起作用
import numpy as np
MassFlowOx = np.linspace(0.1,103,150)*10**-3
MassFlowFuel = np.linspace(0.1,75,150)*10**-3
MassFlowComb = []
for a in MassFlowOx:
for b in MassFlowFuel:
MassFlowComb.append(a+b)
MassFlowComb = np.array(MassFlowComb)
import numpy as np
MassFlowOx = np.linspace(0.1,103,150)*10**-3
MassFlowFuel = np.linspace(0.1,75,150)*10**-3
MassFlowComb = []
for Fo in MassFlowOx:
sub_list = []
for Ff in MassFlowFuel:
sub_list.append(Fo+Ff)
MassFlowComb.append(sub_list)
print(np.asarray(MassFlowComb))