【发布时间】:2019-05-29 15:10:12
【问题描述】:
我有一个矩阵u,我想遍历所有行和所有列并执行以下操作。如果元素不为零,则返回行索引的值。如果元素为零,则查找该元素之后的下一个非零元素的行索引。我可以使用两个带有查找功能的 for 循环轻松地做到这一点。但是我需要多次执行此操作(不是因为矩阵的大小,而是因为这被多次调用)。我怎样才能更快地做到这一点?
这是for循环代码:
for w=scenario_size:-1:1
for t=1:time_size
l = u(t,w) ;
if l~=0
tprime = t ;
else
tprime = t+ find(u(t:end,w),1,'first') -1 ;
end
i(t,w) = tprime ;
boo(t,w) = number(tprime,w)/u(tprime,w) ;
end
end
例如,如果一列是[0,0,5,1,0,3],则i 是[3,3,3,4,6,6]。 u 的任何一列的最后一个元素总是非零(我通过在末尾人为地添加一行 1 来强制这样做)。
那么boo 是某个矩阵number 的tprime 的对应条目除以对应的u(在构造上不为零)。
【问题讨论】:
-
请定义输入(
scenario_size等)以便代码可以运行,并指出所需的输出是什么 -
另外,提供一个小例子及其预期输出。我是否理解如果一列是
[0,0,5,1,0,3],那么它的预期输出是[3,3,3,4,6,6]? -
@LuisMendo 您可以接受任何输入 - 问题很笼统。说scenario_size = time_size = 3。随便取一个u
-
当然这个问题很笼统。但是,如果您不提供示例输入和输出,我们无法确定 (1) 我们在运行代码时考虑了您可能想到的输入限制,以及 (2) 我们正在生成您想要的确切输出。例如(但请解决我上面的一般观点),您说如果元素为零,则查找该元素之后的下一个非零元素的行索引。如果没有这样的元素怎么办?在问题变得更清楚之前,我投票决定以不明确的方式结束
-
@Florian 你理解正确。还需要一个额外的步骤。我正在用你的例子更新问题。