【发布时间】:2012-11-27 02:44:49
【问题描述】:
我有一个数组 A,并且想将每列的最后四个元素重新整形为一个 2x2 矩阵。我希望将结果存储在单元格数组 B 中。
例如,给定:
A = [1:6; 3:8; 5:10]';
我希望 B 包含三个 2x2 数组,这样:
B{1} = [3, 5; 4, 6];
B{2} = [5, 7; 6, 8];
B{3} = [7, 9; 8, 10];
我显然可以在 for 循环中使用 reshape(A(end-3:end, ii), 2, 2) 之类的东西并在 ii 上循环。任何人都可以提出一种矢量化方法,也许使用类似于cellfun 的方法,可以将操作重复应用于数组的列?
【问题讨论】:
-
我不确定您是否需要进行任何重塑才能达到您想要的结果。为什么不使用
for i = 1:3:B{i} = A((2*i-1):2*i, 2:3);?您是否有需要“矢量化”的性能问题? -
啊,我知道我选择了一个令人困惑的例子。我取的是一列的最后四个元素,而不是 A 的平方子集。此外,这个简单的示例不需要额外的性能 - 我打算将其扩展为从大量 ode45 数据创建 18x18 数组。从技术上讲,它也不需要它;我主要是对未来的参考感到好奇。
标签: arrays matlab octave vectorization