我正在尝试从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],
.
.
.,
]
我知道我可以使用笛卡尔积来找到所有可能的组合(我不在乎重复),但是我不需要所有值的乘积,我需要加法。我似乎无法获得while循环的编码,因为它可以在生成新数据时追加行(下面的代码)。
import numpy as np
MassFlowOx = np.linspace(0.1,103,150)*10**-3
MassFlowFuel = np.linspace(0.1,75,150)*10**-3
size = len(MassFlowFuel)
size_final=size**2
MassFlowComb = np.zeros(size)
temp = np.zeros(size, dtype=float)
i=0
j=0
MassFlowCombArray = np.zeros(size)
# runs all possible combinations for the addition of values in arrays
while i<size-1:
temp[i] = MassFlowFuel[i] + MassFlowOx[i]
while j<size-1:
MassFlowOx[i] = MassFlowOx[j]
print MassFlowOx[i]
j += 1
MassFlowComb[i] = temp[i]
MassFlowCombArray[i] = np.append([MassFlowComb[0]], [MassFlowComb[i]], axis = 0)
i+=1
print MassFlowComb[i]
我可以使用特定功能吗?我未能成功地找到一种在while循环中进行值的所有组合加法的方法,因为它会产生序列错误。
编辑:
两个答案都有效。 for循环使其为N维,而使用np.add.outer
则为N维数组。就此代码而言,后者更为有用。
感谢您的所有答复!
答案 0 :(得分:2)
您所需的内容已经在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)
array([[5, 6, 7], # [[1+4, 1+5, 1+6],
[6, 7, 8], # [2+4, 2+5, 2+6],
[7, 8, 9]]) # [3+4, 3+5, 3+6]]
答案 1 :(得分:0)
为什么不只使用double for循环?
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)
答案 2 :(得分:0)
在这种情况下,创建循环比循环播放更好。您的代码可能很简单:
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来实现