【发布时间】:2014-08-07 05:23:46
【问题描述】:
如何在单元格中高效地迭代?
我有一个这样的单元格:
H{i,j} =
{1} {2} {3} {4} ...
{5} {6} {7} {8} ...
....
实际尺寸为~300*300,只有~1000个非空项。
for i = 1 : numel(H)
if isempty(H{i}), continue, end
for j = 1 : numel(H)
if i==j || isempty(H{j}), continue, end
COMPLEX_OPERATION(H{i}, H{J});
end
end
end
这是对单个单元格的两层(请原谅我的英语)迭代。
结果证明这段代码效率低下。
在迭代中浪费了太多时间。
我正在尝试找到一种有效的方法来执行此迭代。
一种可能的解决方案是使用 cellfun(@COMPLEX_OPERATION),但我不确定如何使用 cellfun 执行此双循环。
另一种可能的解决方案是首先修剪空单元格。但是我不确定这是否会在很大程度上解决这个问题。
【问题讨论】:
-
你正在循环你的数据,只有当两个元素(
H{i}和H{j})都不为空时你才想做COMPLEX_OPERATION(),其他时候你什么都不想做。但是你不想做COMPLEX_OPERATION(H{i}, H{i});。COMPLEX_OPERATION(H{i}, H{j});和之后的COMPLEX_OPERATION(H{j}, H{i});你想同时做吗? -
不清楚您是如何存储数据的。这可能不是一种有效的开始方式。解决您存储它的方式,将解决您当前和未来的大部分问题。如果每个单元格都有一个标量,那么根本没有理由使用单元格数组。
-
我同意。您不应该将元胞数组用于单个值。此外,您不应使用
i和j作为变量,因为它们用于表示复数。