我已经找到了一种适用于我的目的的方法,但是我希望能够将解决方案推广到更多数量的试验,而不必为每次试验增加硬编码新的if语句。现在试验= 4,如果我想试验= 5,我需要写一个新的if语句。
if new_A == 1:trials;
outer_matrices{:,1} = A;
end
if new_A == trials+1:trials*2;
outer_matrices{:,2} = A;
end
if new_A == (trials*2)+1:trials*3;
outer_matrices{:,3} = A;
end
if new_A == (trials*3)+1:trials*4;
outer_matrices{:,4} = A;
end
你看到模式(试验= 5我需要分别乘以4和5,然后改为外部矩阵{:,5})
我确信这是一个我想不到的相当简单的解决方案/结构。提前谢谢!
答案 0 :(得分:0)
试试这个(没有循环或条件方法) -
N = 5;%%// Number of cases
ind = find(all(bsxfun(@eq,reshape(1:trials*N,trials,[]),new_A'),1))
outer_matrices{:,ind} = A;
答案 1 :(得分:0)
我认为new_A
是一个元素数量为trials
的向量。由于(trials*n)+1:trials*(n+1)
是[trials*n+1, trials*n+2, ... ]
形式的向量,您可以这样做:
if ~mod(new_A(1)-1,trials) && all(diff(new_A) == 1)
outerMatrices{(trials+new_A(1)-1)/trials} = A;
end
它的作用是:
~mod(new_A(1)-1,trials)
使用modulus操作来检查new_A
中的第一个元素是否可以被试验整除。如果是,则mod
将返回0
。 ~
前面的mod
表示“不是”,因此如果mod
返回零,则评估为“~0 == 1”。
all(diff(new_A)==1)
检查new_A
中的所有元素是否恰好是一个元素。
答案 2 :(得分:0)
用于镜像问题代码的基本for
循环方法是:
N=5;
for ii=1:N
if new_A == trials*(ii-1)+1:trials*ii
outer_matrices{:,ii} = A;
end
end