【问题标题】:array manipulation with circshift octave / matlab使用 circshift octave / matlab 进行数组操作
【发布时间】:2014-11-07 14:29:03
【问题描述】:

1) 我正在尝试同时移动数组的(外部单元格)第一个和最后一个单元格向内。这是我正在尝试对数组执行的操作的内部动画 inward animation。如您所见,外部细胞同时(从末端)向内移动

这是一张图片,但动画显示效果要好得多,请注意该数组可能包含偶数或奇数个单元格

Inner rotation steps
1 2 3 4 5 6 7
4 1 2 3 6 7 5
3 4 1 2 7 5 6

2) 我正在尝试同时使用 circshift(我认为这是最快的)移动数组的中间单元格向外。 这是我正在尝试做的外部动画 outward animation。如您所见,信号的中间同时向外(向左和向右)移动。

这是一张图片,但动画显示效果要好得多,请注意该数组可能包含偶数或奇数个单元格

Outer rotation steps
1 2 3 4 5 6 7
2 3 4 1 7 5 6
3 4 1 2 6 5 7

Example: inward
a = (1:7)
y=circshift(A,[0 -2]) %shift end of array inward
3   4   5   6   7   1   2

a = (1:7)
y=circshift(A,[0 2]) %shift beginning of array inward
6   7   1   2   3   4   5

不确定如何使用 circshift 将中间单元格向外移动或同时向内移动外部单元格

我不确定如何从中心开始 circshift 并将阵列向外/向内移动以获得这种效果。

请注意,我不是想得到这个等式,我只是想让数组以同样的方式移动。我正在使用与 matlab 兼容的 octave 3.8.1。

【问题讨论】:

  • 所以如果a = 1:7 那么你想把所有东西都向内移动,所以在一个移动之后你想要...? 1 2 3 5 6 7 ??s 在哪里?如果你有一个偶数,那么我猜你希望1:8 转移到4 1 2 3 6 7 8 5 对吗?一些手动工作的数字示例在这里会很有帮助
  • @Dan 这正是我的数字问题正是我想要对数组做的事情。 youtu.be/65iu4rajIEQyoutu.be/hHUqWoRmvbk
  • 我不确定我完全理解你想要什么,但你可以在矩阵上使用circshift。如果您的信号的每一侧都采用一列矩阵,您可以使用单个调用,然后简单地将其展平(尽管在创建该矩阵时您必须反转其中一个信号)。另一种方法是简单地将索引移动到您的信号(也是矩阵的形状)。
  • @Dan 我添加了一些数字,希望能有所帮助
  • 为什么不将数组分成两部分,然后像circshift(part1,[0 1])circshift(part2,[0 -1]) 一样分别对它们使用circshift

标签: arrays matlab octave


【解决方案1】:
A = 1:7;

split = ceil(numel(A)/2);

n = 2;
A(1:split) = circshift(A(1:split), [0, n]);
A(split+1:end) = circshift(A(split+1:end), [0, -n]);

如果你愿意,可以将最后三行放在一个循环中。也只需将n 的符号更改为向内或向外

【讨论】:

  • 为了在八度音程中工作,我需要调整这两行 A(1:split) = circshift(A(1:split), [0 n]); A(split+1:end) = circshift(A(split+1:end), [0 -n]);非常感谢!!!
【解决方案2】:

如何构建新索引而不是使用 circshift:

A = 1:7;

halfLen = ceil(length(A)/2); % or use ceil to 
idcsOutward = [2:halfLen,1,length(A),(halfLen+1):(length(A)-1)];

B1 = A(idcsOutward)
B2 = B1(idcsOutward)

% and inward:
idcsInward = [halfLen,1:(halfLen-1),(halfLen+2):length(A),halfLen+1];

C1 = A(idcsInward)
C2 = C1(idcsInward)

结果是:

B1 =
     2     3     4     1     7     5     6

B2 =
     3     4     1     2     6     7     5

C1 =
     4     1     2     3     6     7     5

C2 =
     3     4     1     2     7     5     6

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    • 2019-03-07
    • 1970-01-01
    相关资源
    最近更新 更多