【发布时间】:2017-07-04 07:33:31
【问题描述】:
只是给你一些背景:
我必须将一些 MATLAB 代码翻译成 Python 3,但在这里我遇到了一个小问题。
Matlab:
for i in 1:num_nodes
for j in 1:num_nodes
K{i,j} = zeros(3,3);
我翻译成的:
k_topology = [[]]
for i in range(x):
for i in range(x):
k_topology[[i][j]].extend(np.zeros(3,3))
另外,在 Matlab 代码中还有第三个循环:
for k in 1:3
K{i,j}(k,k) = -1
哪一种……让我不高兴?
事实上,我真的不知道如何将这种变量转换为 Python。另外,我猜我的 Python 代码有点“损坏” - 我并不是真的要求你们中的任何人改进它 - 所以我只是问哪个是最好的如何将 Matlab 的单元格翻译成 Python?
我终于找到了显然简单的翻译方法,使用列表理解 - 根据 kazemakase 的回答。实际的 Python 代码现在如下所示:
k_topology = [[np.zeros((3,3)) for j in range(self.get_nb_nodes_from_network())]\
for i in range(self.get_nb_nodes_from_network())]
在输出中看起来像这样:
[[array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]]),
array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]]),
array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])], ..., [array(...)]]
(这里的值实在太多,无法粘贴,但我想你明白了。)
【问题讨论】:
-
描述一下 Matlab 代码的作用以及您认为它难以翻译的原因可能会有所帮助。
-
K 矩阵是用来表示电网的拓扑结构的。所以它将包含长度从 1 到最大 3 的其他矩阵。就目前而言,我可以理解第一个循环(带有 K{i,j} 的那个),但在我看来第二个循环真的很奇怪:什么是 K{i,j}(k,k)?我该如何翻译它?这就是我觉得很难的原因:我就是不明白
-
所以
K是二维的?那么k_topology和K之间有什么区别? -
我认为最接近的是
np.arrayofdtype=object。 -
是的,我忘了说:k_topology 是我的 Python 等价于 Matlab 的 K 矩阵