按数组值和数组值相关的操作进行数组索引

时间:2016-05-30 13:49:34

标签: python arrays python-3.x numpy

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

*为了计算电池之间的热传递,我需要根据电池温度的热导率。 具有相应温度(以摄氏度为单位)的热导率存储在矩阵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中的值)来获取例如电池温度T_Cell=5的热导率。 )。此处显示的是索引为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 = array([[620], [606], [606], [598], [598], [590], [574], [569], [569]])

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

我真的不知道为什么,但突然之间它的工作方式与我的例子中显示的完全一样......也许我的代码中有一个错字...: - /虽然我的第二个问题仍未得到解决。

我的第二个问题是: 我有一个微分方程,其解决方案根据一个参数是零还是非零而变化。该参数取决于单元格,因此它可能是

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

目前,我决定使用哪种解决方案的方法是在Arg - 向量(将来:3d-array)上运行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!)

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

试试这个:

[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 ]]

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