如何在 Matlab 中将字符数组的偶数和奇数索引重新分配到一个新的较小字符数组中?

Posted

技术标签:

【中文标题】如何在 Matlab 中将字符数组的偶数和奇数索引重新分配到一个新的较小字符数组中?【英文标题】:How do I reassign even and odd indices of a character array into a new smaller character array in Matlab? 【发布时间】:2015-04-27 17:06:10 【问题描述】:

在 matlab 中我有一个 32x1 的字符数组 A 这样

A = 'F1' 'F2' 'F3' 'F4' 'F5' 'F6' ... 'F32';
A = A';

现在我正在尝试对 A 执行以下操作。 对于 A 意义的每个偶数索引

A2, A4, A6...

我想将这些值分配给 16x1 字符数组 B,对于 A 的奇数索引,我想将这些值分配给不同的 16x1 数组 C。

我使用以下代码:

for i=1:32
 if mod(i,2)==0
   Bi = Ai;
 else
   Ci = Ai;
 end
end

它可以工作,但只是部分因为它分配了正确的值 for 例如B2 and B4B1 and B3 中的值与B2 and B4 中的值相同。

谁能告诉我如何将字符数组的偶数和奇数索引重新分配到一个新的更小的字符数组中?我的问题是我要从 32x1 变成 16x1,我不确定如何避免额外的 16 个条目。

非常感谢!

【问题讨论】:

为什么不只是B = A(2:2:end); C = A(1:2:end); 在发布之前尝试过,但没有成功,正如@thewaywewalk 建议的deal 工作了! 【参考方案1】:

要真正回答这个问题,请在 cmets 中使用 Luis Mendo 的想法。可以和deal结合,节省一行代码:

[B, C] = deal(A(2:2:end), A(1:2:end))

要使您的循环正常工作,您需要第二个运行索引jj

A = 'F1' 'F2' 'F3' 'F4' 'F5' 'F6';

for ii = 1:6
     jj = ceil(ii/2);
     if mod(ii,2)==0
        Bjj = Aii;
     else
        Cjj = Aii;
     end
end

【讨论】:

非常感谢,不知道deal 存在.. 现在我知道了!非常感谢

以上是关于如何在 Matlab 中将字符数组的偶数和奇数索引重新分配到一个新的较小字符数组中?的主要内容,如果未能解决你的问题,请参考以下文章

在C中将奇数索引元素从一个数组复制到另一个数组

剑指 Offer——13. 调整数组顺序使奇数位于偶数前面

有没有办法过滤 presto 数组中的奇数或偶数索引?

使用 ForEach (SwiftUI) 的偶数行和奇数行

[剑指offer] 13. 调整数组顺序使奇数位于偶数前面

如何以优雅的方式使用 OpenCV、c++ 检索偶数/奇数索引中的值?