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

时间:2011-04-11 19:17:28

标签: matlab

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

  1. 为了腾出空间,第一个数组元素将被覆盖
  2. 每个其他元素都会在新位置移位index-1 ---左移。
  3. 新元素将插入到最后一个元素的位置,该元素通过移动元素变为空。
  4. 我想在不使用任何循环的情况下这样做。

3 个答案:

答案 0 :(得分:8)

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

A = [ A(1:pos) newElem A((pos+1):end) ]

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

请告诉我这是否适合您!

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

A = [ A(2:end) newElem ]

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

答案 1 :(得分:6)

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

  

B = circshift(A,shiftsize)通过A元素循环移动数组shiftsize中的值。 shiftsize是整数标量的向量,其中n - th元素指定数组n的第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

答案 2 :(得分:1)

简单地说,删除数组中的第一个值并在最后添加新值。

A(1) = []
A = [A newValue] 

数字示例

A = [1 2 3 4];
A(1) = [];
A = [A 5];

结果是A具有值[2,3,4,5]