arrays - Julia:在 for 循环中累积数组(循环局部范围的问题)
问题描述
我遇到了用 for 循环累积数组的问题(我的数组被称为condition_list
,每一行都存储一个唯一的参数配置)。
下面的代码是我构建这个数组的设想:
param1_vals = [1.0f0 2.0f0 3.0f0]; # specific values here don't matter
param2_vals = [1.0f0 2.0f0 3.0f0]; # specific values here don't matter
param3_vals = [1.0f0 2.0f0 3.0f0]; # specific values here don't matter
condition_list = zeros(Float32, 1, 3) # initialize condition_list
for ii = 1:length(param1_vals)
for jj = 1:length(param2_vals)
for kk = 1:length(param3_vals)
row_to_stack = [param1_vals[ii], param2_vals[jj], param3_vals[kk])
condition_list = vcat(condition_list, row_to_stack)
end
end
end
condition_list = condition_list[2:end,:] # pop off that first row (leftover of the initialization)
因此,结果的每一行都condition_list
应该具有 、 和 的每个值的param1_vals
唯一param2_vals
配置param3_vals
。
我遇到的问题是关于局部变量的范围——condition_list is not defined
当使用vcat
. 如果我不能使用数组累积,解决这个问题的最儒略的方法是什么?或者也许有一些解决方案使用push!
或什么?
另外,有没有一种方法可以在不做我最后做的愚蠢的“弹出第一行”的事情的情况下积累一个数组?您可以从零行 3 列数组开始并在其上累积行吗?
解决方案
第一个评论是,也许拥有一个惰性元组迭代器就足够了。在这种情况下,如果您编写以下代码就足够了:
res = Iterators.product(param1_vals, param2_vals, param3_vals)
但是,如果您真的需要矩阵,请在以下位置运行以下代码res
:
mapreduce(x -> hcat(x...), vcat, res)
现在,如果您真的想使用您在代码中执行的操作,我会选择:
condition_vec = Matrix{Float32}[]
for ii = 1:length(param1_vals)
for jj = 1:length(param2_vals)
for kk = 1:length(param3_vals)
row_to_stack = [param1_vals[ii] param2_vals[jj] param3_vals[kk]]
push!(condition_vec, row_to_stack)
end
end
end
condition_list = reduce(vcat, condition_vec)
但是,此代码有点过于复杂,您可以简单地执行以下操作:
condition_vec = Matrix{Float32}[]
for p1 = param1_vals, p2 = param2_vals, p3 = param3_vals
push!(condition_vec, [p1 p2 p3])
end
condition_list = reduce(vcat, condition_vec)
没有中间索引。
最后,您的代码无法像condition_list
全局变量那样工作,您必须编写:
global condition_list = vcat(condition_list, row_to_stack)
使其工作(请注意,Julia 会发生变化,很快就不需要了;此评论适用于 Julia 的当前 1.4.2 版本,或 1.0 版本后的其他版本)。
最后请注意:
row_to_stack = [param1_vals[ii], param2_vals[jj], param3_vals[kk])
是不正确的语法(您)
没有]
在行尾使用)。此外,您,
不仅使用我的代码中的空格来分隔值,这些值会为您创建一个列向量(而不是具有 1 行的矩阵,因为我猜这是您对zeros
函数使用的要求)。
如果您对此代码有更多疑问,请在评论中提问。
推荐阅读
- tesseract - 正方体输出中的奇怪符号
- python - FastAPI上传多张图片的请求格式
- react-native - react-native-paper 的样式宽度菜单
- java - spring cloud stream ibm qm binder 实现
- python - 如何在 Python 中计算冒泡排序中的交换次数
- python - Julia:龙格库塔法的计算时间
- python - 在 python 中显示 SyntaxError
- ios - 当两个用户之间正在进行来电并收到另一个来电时,应自动拒绝另一个来电
- ansible - 为什么 Ansible 变量覆盖策略的行为似乎不像记录的那样?
- java -
实现 'com.chaos.view:pinview:1.4.4' 当我尝试在我的布局上调用它时它什么也不显示
<com.chaos.view.PinView android:layout_width="wrap_content"