可以使用MATLAB中的索引关系选择向量/矩阵/张量的元素吗?
为了澄清我的问题,我将解释我的问题。
我有一个三维零张量D(m,n,p)
。
我现在需要将元素设置为1
m == L-n+p+1
。
(L
只是一个常量。)
有没有办法在MATLAB中执行此操作而不需要使用嵌套的for循环?
谢谢!
答案 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