python - 使用 Numpy 和 while 循环生成所有可能的加法组合
问题描述
我正在尝试从 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 维数组,而 usingnp.add.outer
则使它成为一个 N 维数组。就本代码而言,后者更有用。
谢谢大家的回复!
解决方案
你需要的已经在 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]]
推荐阅读
- git - 是否有内置命令可以获取从一个提交到另一个提交的路径?
- javascript - 使用 Javascript 处理文件永远不会完成
- python - Vscode 无法导入 flask_wtf 和 wtforms
- python - 如何在 spyder 中重新打开绘图窗格?
- compiler-errors - 包含 gdbserver 时的 Buildroot 交叉编译错误 - 冲突声明 'typedef struct rpl_mbstate_t rpl_mbstate_t'
- python - 在 Setup.py 中控制数据目录的包含和排除的正确语法是什么?
- url - URL 编码是否保证所有输出的字符都是可打印的(可见的)?
- c++ - read 方法从文件中返回最后一个对象两次
- node.js - NodeJS 服务器 pdf 文档生成问题
- c++ - 在 C++ 中打印套接字时,数字代表什么?