首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于圆环移位倍频程/ matlab的阵列操纵

基于圆环移位倍频程/ matlab的阵列操纵
EN

Stack Overflow用户
提问于 2014-11-06 15:09:05
回答 2查看 696关注 0票数 3

1)我试图同时将数组的(外部单元)第一次也是最后一次单元格向内移动。下面是我尝试使用数组内向动画所做工作的内部动画。正如你所看到的,外部细胞同时向内移动(从末端)。

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

代码语言:javascript
运行
复制
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)我试图同时使用圆环移位(我认为是最快的)将数组的中间单元向外移动。这是一个外向的动画,我要做的也是外向动画。正如你所看到的,信号的中央同时向外(左和右)移动。

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

代码语言:javascript
运行
复制
Outer rotation steps
1 2 3 4 5 6 7
2 3 4 1 7 5 6
3 4 1 2 6 5 7

代码语言:javascript
运行
复制
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

不确定如何利用圆圈向外移动中间细胞,或外部细胞同时向内移动。

我不知道如何从中心开始旋转,并将数组向外/向内移动以获得这种效果。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-06 16:35:16

代码语言:javascript
运行
复制
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的符号更改为向内或向外

票数 2
EN

Stack Overflow用户

发布于 2014-11-06 16:35:47

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

代码语言:javascript
运行
复制
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)

结果是:

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26782743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档