【问题标题】:Selecting elements using index relationship - MATLAB使用索引关系选择元素 - MATLAB
【发布时间】:2023-03-25 10:40:02
【问题描述】:

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

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

有没有办法在 MATLAB 中不使用嵌套的 for 循环来做到这一点?

谢谢!

【问题讨论】:

  • 这里提供的解决方案对您有用吗?
  • 是的,它工作得很好,被接受为答案。谢谢!

标签: matlab indexing vectorization


【解决方案1】:

方法#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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    相关资源
    最近更新 更多