如何在不使用matlab循环的情况下将数组元素向左移位?

Sha*_*han 7 matlab

我在Matlab中有一个固定大小的数组.当我想插入一个新元素时,我会执行以下操作:

  1. 为了腾出空间,第一个数组元素将被覆盖
  2. 每个其他元素都将在新位置移动index-1---左移.
  3. 新元素将插入到最后一个元素的位置,该元素通过移动元素变为空.

我想这样做而不使用任何循环.

Dar*_*uuk 8

我不确定我理解你的问题,但我认为你的意思是:

A = [ A(1:pos) newElem A((pos+1):end) ]
Run Code Online (Sandbox Code Playgroud)

这将在数组中的newElem位置之后插入变量(或数组).posA

如果这对您有用,请告诉我!

[编辑]好吧,看起来你实际上只是想将数组用作移位寄存器.你可以这样做:

A = [ A(2:end) newElem ]
Run Code Online (Sandbox Code Playgroud)

这将从第2个到最后的所有元素A,并将您的newElem变量(或数组)添加到结尾.


Chr*_* A. 6

circshift功能是另一种解决方案:

B = circshift(A,shiftsize)Ashiftsize元素循环移动数组中的值.shiftsize是整数标量的向量,其中n-th元素指定n数组的-th维度的移位量A.如果元素shiftsize为正,则值A向下(或向右)移动.如果是负数,则值A向上(或向左)移动.如果为0,则不移动该维度中的值.

例:

将第一个维度值向下循环移1,将第二个维度值向左移动1.

A = [ 1 2 3;4 5 6; 7 8 9]

A =
    1     2     3
    4     5     6
    7     8     9

B = circshift(A,[1 -1]);
B  = 
    8     9     7
    2     3     1
    5     6     4
Run Code Online (Sandbox Code Playgroud)