gpt4 book ai didi

python - 通过数组值和数组值相关操作进行数组索引

转载 作者:行者123 更新时间:2023-12-01 03:55:32 24 4
gpt4 key购买 nike

我正在使用 numpy 在 python 中开发有限体积传热模型。我有许多垂直堆叠的单元(计划明年转移到 3D 模型),每个单元都有不同的温度。

<小时/>

*为了计算电池之间的热传递,我需要取决于电池温度的热导率。热导率及其相应温度(摄氏度)存储在矩阵 TC 中,电池温度(摄氏度)存储在向量(将来存储在矩阵)T_Cell 中。这些数组看起来像:

TC = numpy.array([[0,569],[1,574],[2,582],[3,590],[4,598],[5,606],[6,613],[7,620]])
T_Cell = numpy.array([[7],[5],[5],[4],[4],[3],[1],[0],[0]])

TC 中的温度对应于它们的行索引,因此可以通过索引来访问热导率,例如 T_Cell=5 的电池温度温度(存储在 T_Cell 中的值)。这里显示的是索引为 2 的单元格:

TC_Cell = TC[numpy.round(T_Cell[2]),1]

结果为TC_Cell = 606。是否有一个数组操作可以让我在与 T_Cell 形状相同的数组中获取单元的热导率(仅取决于单元的温度)?例如,使用 TCT_Cell 数组,如上所示:

TC_Cell = TC[T_Cell, 1]

因此 TC_Cell 的结果如下所示:

TC_Cell = 数组([[620],
[606],
[606],
[598],
[598],
[590],
[574],
[569],
[569]])

不需要插值,因为我已经将 TC 中的值插值到令人满意的程度(此处未显示以保持干净,数组中的值也被简化并且物理上不正确)。*

我真的不知道为什么,但突然它的工作方式与我的示例中所示的完全一样...也许我的代码中某个地方有错字...:-/尽管我的第二个问题仍未解决。

<小时/>

我的第二个问题是:我有一个微分方程,其解根据一个参数为零或非零而变化。这个参数取决于单元格,所以它可能是

Arg = numpy.array([[0.12],[0.9],[0],[0],[0.2]])

目前,我决定使用哪种解决方案的方法是在 Arg 向量(将来:3d 数组)上运行 for 循环,并检查单元格是否为 0 。喜欢:

a=1
c=2
d=3
for cell in range(numpy.size(Arg, 0)):
if Arg[cell, 0] != 0:
# Solution1:
Solution[cell] = (a / Arg[cell] + c) * numpy.e**(Arg[cell] * d) - (a / Arg[cell])
elif Arg[cell, 0] == 0:
# Solution2:
Solution[cell] = a * d + c

结果:

Solution = array([[  6.47773728],
[ 45.18138759],
[ 5. ],
[ 5. ],
[ 7.7548316 ]])

是否有数组操作可以避免使用 for 循环?
为了避免由于缺少信息而进一步混淆:a 也是一个与 Arg 具有相同大小/形状的数组:

a = numpy.array([[1],[1],[1],[1],[1]])

(并且值不一定是 1!)

提前感谢您的帮助!

最佳答案

试试这个:

[a,b,c] = [1,2,3]
Arg = numpy.array([[0.12],[0.9],[0],[0],[0.2]])
Solution = Arg
Solution[Solution ==0] = 1
Solution = Solution * a * b * c
print(Solution)

返回:

[[ 0.72]
[ 5.4 ]
[ 6. ]
[ 6. ]
[ 1.2 ]]

不要试图将 Arg 中的 0 值排除在乘法之外,只需将它们更改为 1,这在乘法中是中性的,因此与避免乘法具有相同的效果。

关于python - 通过数组值和数组值相关操作进行数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37527348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com