Julia 用返回多个值的函数的矢量化调用替换for循环

Julia 用返回多个值的函数的矢量化调用替换for循环,julia,vectorization,Julia,Vectorization,我有以下函数:problema\u firma\u emprestimo(r,w,r\u emprestimo,posicao,posicao\u banco),其中所有输入都是标量。 此函数使用返回三个不同的矩阵 返回demanda_k_emprestimo、demanda_l_emprestimo、lucro_emprestimo 我需要对存储在向量中的一系列posicao_banco值运行此函数。 我使用for循环来实现这一点,因为我需要三个单独的矩阵,每个矩阵存储函数三个输出中的一个,每

我有以下函数:
problema\u firma\u emprestimo(r,w,r\u emprestimo,posicao,posicao\u banco)
,其中所有输入都是标量。 此函数使用
返回三个不同的矩阵
返回demanda_k_emprestimo、demanda_l_emprestimo、lucro_emprestimo

我需要对存储在向量中的一系列posicao_banco值运行此函数。 我使用for循环来实现这一点,因为我需要三个单独的矩阵,每个矩阵存储函数三个输出中的一个,每个矩阵的第一维对应于posicao_banco的索引。我的这部分代码是:

demanda_k_emprestimo = zeros(num_bancos,na,ny);
demanda_l_emprestimo = similar(demanda_k_emprestimo);
lucro_emprestimo = similar(demanda_k_emprestimo);
for i in eachindex(posicao_bancos)
    demanda_k_emprestimo[i,:,:] , demanda_l_emprestimo[i,:,:] , lucro_emprestimo[i,:,:] = problema_firma_emprestimo(r,w,r_emprestimo[i],posicao,posicao_bancos[i]);
end
 
有没有一种使用矢量化函数快速而干净的方法?类似于公司的问题(r,w,r,emprestimo[i],posicao,posicao\u bancos)?当我这样做的时候,我得到了一个带有结果的元组,但是我找不到一个解包答案的好方法。
谢谢

不幸的是,在这里使用广播并不容易,因为这样您将得到一个元组数组的输出,而不是数组的元组。我认为循环是一种非常好的方法,与广播相比没有性能损失

但是,我建议您以不同的方式组织输出数组维度,以便
I
索引到最后一个维度,而不是第一个维度:

for i in eachindex(posicao_bancos)
    demanda_k_emprestimo[:, :, i] , ...
end
这是因为Julia数组是列主数组,通过这种方式,输出值以最有效的方式填充到输出数组中。你也可以考虑把输出数组转换成矩阵的向量,而不是3D数组。 另一方面:由于您正在(或应该)创建一个MWE是为了让人们回答,因此最好使用更短、更容易混淆的变量名。特别是对于那些不懂葡萄牙语的人(我猜是这样),你的变量名是超长的,令人困惑的,并且让代码看起来很密集。很难一目了然地说出
demanda_k_emprestimo
demanda_l_emprestimo
之间的区别。变量的含义也不重要,因此最好只调用它们
A
B
X
Y
,以及函数
foo
或其他什么