【问题标题】:Convert Matlab to Python将 Matlab 转换为 Python
【发布时间】:2020-02-15 20:05:38
【问题描述】:

我正在将matlab代码转换为python,我对以下代码行有很大的疑问:

BD_teste = [BD_teste; grupos.(['g',int2str(l)]).('elementos')(ind_element,:),l];

整个代码是这样的:

BD_teste = [];
por_treino = 0;
for l = 1:k
    quant_elementos_t = int64((length(grupos.(['g',int2str(l)]).('elementos')) * por_treino)/100);
    for element_c = 1 : quant_elementos_t
        ind_element = randi([1 length(grupos.(['g',int2str(l)]).('elementos'))]);
        BD_teste = [BD_teste; grupos.(['g',int2str(l)]).('elementos')(ind_element,:),l];
        grupos.(['g',int2str(l)]).('elementos')(ind_element,:) = [];
    end
end

下面这行代码是一个结构,当我转换为 python 时,我使用了一个列表,在其中使用了一个字典,其列表为 'elementos':

'g',int2str(l)]).('elementos')

所以我的问题就在我上面引用的那一行,我想知道发生了什么以及它是如何发生的,以及我将如何用 python 编写。

非常感谢您。

【问题讨论】:

  • 我正在写一个答案,但作为一般建议,避免将变量命名为l,它很容易与1 混淆。

标签: python matlab dictionary struct


【解决方案1】:

BD_teste = [BD_teste; grupos.(['g',int2str(l)]).('elementos')(ind_element,:),l];

是一条非常奇怪的线。让我们把它分解成碎片:

int2str(l) 将数字 l 作为 char 数组返回(从 '1' 到 k)。

['g',int2str(l)] 返回 char 数组 g1,然后是 g2 等等以及 l 的值。

grupos.(['g',int2str(l)]) 将返回属于结构体grupos 的名为g1g2 等的字段的值。

grupos.(['g',int2str(l)]).('elementos') 现在假设grupos.(['g',int2str(l)]) 本身是一个结构,并返回其名为“elementos”的字段的值。

grupos.(['g',int2str(l)]).('elementos')(ind_element,:) 假设grupos.(['g',int2str(l)]) 是一个矩阵,此行返回一个包含所述矩阵的第ind_element 行的行向量。

grupos.(['g',int2str(l)]).('elementos')(ind_element,:),l 将数字一附加到之前获得的向量中。

[BD_teste; grupos.(['g',int2str(l)]).('elementos')(ind_element,:),l] 将线向量[grupos.(['g',int2str(l)]).('elementos')(ind_element,:),l] 附加到矩阵BD_teste 的底部。并创建一个新矩阵。

最后: BD_teste = [BD_teste; grupos.(['g',int2str(l)]).('elementos')(ind_element,:),l];``assignes the value of the obtained matrix to the variableBD_teste`,覆盖其先前的值。实际上,这只是追加新行,但由于覆盖步骤,它不是很有效。

建议附加: BD_teste(end+1,:) = [grupos.(['g',int2str(l)]).('elementos')(ind_element,:),l];

现在,您将如何在 Python 中重写它是一个完全不同的故事,主要取决于您希望如何定义变量 grupos

【讨论】:

    猜你喜欢
    • 2014-03-05
    • 2021-03-10
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    相关资源
    最近更新 更多