【发布时间】:2018-09-25 09:13:28
【问题描述】:
我有一个 5 维数组想要对每个字段进行计算,并根据结果用“真”或“假”填充每个字段。现在我想知道是否有一种不使用 5 个“嵌套”循环的快速方法。 感谢您的帮助
编辑: 抱歉,问题不清楚。我需要用 5 个不同的变量进行计算,并且我已经检查了每个可能的组合。 我目前的做法是这样的:
while i<10
while j<10
while k < 10
while l<10
while m <10
#some calculation which returns true or false
A[i,j,k,l,m]=f(i, j, k, l, m);
m+=1;
end
l+=1;
end
k +=1;
end
j+=1;
end
i+=1;
end
其中 A 是我的数组。现在我想知道是否有更有效的方法来做到这一点。 对不起,我希望现在更清楚。
【问题讨论】:
-
鉴于下面的 cmets,我建议您更准确地给出您实际想要实现的目标(最好给出一个执行您想要的计算的示例代码)。
-
你需要提供你的程序的一些细节。 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example。
-
如果
f是您想要应用于数组中每个元素的函数A,那么您可以通过使用点广播获得您想要的:B = f.(A)。f应该是一个返回true或false的函数。现在,B是一个与A大小和形状相同的数组,包含布尔值。对于某些情况,比如“值是否大于零”,你可以写B = A .> 0。 -
嗯。好的,所以您希望计算依赖于索引元组,而不是数组的值?
-
这个问题现在对我来说似乎足够清晰和具体。按照@BogumiłKamiński 的建议使用
CartesianIndices是一个好方法。这是您想要的示例:B = [f(ind.I...,) for ind in CartesianIndices(A)].
标签: arrays matrix optimization multidimensional-array julia