使用索引关系选择元素 - MATLAB

时间:2014-11-07 16:12:06

标签: matlab indexing vectorization

可以使用MATLAB中的索引关系选择向量/矩阵/张量的元素吗?

为了澄清我的问题,我将解释我的问题。 我有一个三维零张量D(m,n,p)。 我现在需要将元素设置为1 m == L-n+p+1。 (L只是一个常量。)

有没有办法在MATLAB中执行此操作而不需要使用嵌套的for循环?

谢谢!

1 个答案:

答案 0 :(得分:2)

方法#1

如果不像其他两种方法那样有效,那么人们可以轻松直接地进行操作 -

[M,N,P] = ndgrid(1:m,1:n,1:p) %// create all indices using m, n, p
D(M == L-N+P+1) = 1 %// perform m == L-n+p+1 to get a logical array which you 
                  %// can use to index into D and set the expected elements to 1

方法#2

RHS = bsxfun(@minus,1:p,[1:n]')+1+L; %//'# calculate `L-n+p+1`
D(bsxfun(@eq,[1:m]',permute(RHS,[3 1 2])))=1 %//'# perform equality `m == L-n+p+1` 

方法#3

从性能的角度来看,

Permuting早期可能会有所帮助,因此您可以修改方法#2 -

RHS = bsxfun(@minus,permute(1:p,[1 3 2]),[1:n]) + L + 1
D(bsxfun(@eq,[1:m]',RHS))=1