MATLAB 中是否有该表达式的非迭代等价形式?

发布于 2024-10-20 20:11:11 字数 107 浏览 3 评论 0原文

表达式为:

for i=1:n
    X(:,i) = [P{i}(:)];
end

其中 X 是 DxN 矩阵,P 是元胞数组。

The expression is:

for i=1:n
    X(:,i) = [P{i}(:)];
end

where X is a DxN matrix and P is a cell-array.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

装纯掩盖桑 2024-10-27 20:11:11
reshape(cat(3,P{:}),[numel(P{1}) n])

当然,上面的解决方案只是为了好玩。我建议对这两种解决方案进行分析,并且仅在具有显着性能优势的情况下使用该解决方案。

可维护性和可读性也是编写代码时需要考虑的非常重要的因素。

reshape(cat(3,P{:}),[numel(P{1}) n])

Of course, the above solution is just for fun. I would recommend profiling both solutions and only using this one if it has a significant performance advantage.

Maintenance and readability are also very important factors to consider when writing code.

你是我的挚爱i 2024-10-27 20:11:11

如果您通过 mat2cell 获取元胞数组,您可能希望将图像块排列到数组 X 的列中。这可以使用命令 IM2COL 一步完成

%# rearrange the large array so that each column of X
%# corresponds to the 4 pixels of each 2-by-2 block
X = im2col(largeArray,[2 2],'distinct');

If you obtained the cell array via mat2cell, you may be wanting to arrange blocks of an image into the columns of an array X. This can be achieved in a single step using the command IM2COL

%# rearrange the large array so that each column of X
%# corresponds to the 4 pixels of each 2-by-2 block
X = im2col(largeArray,[2 2],'distinct');
三生一梦 2024-10-27 20:11:11

你也许可以逃脱:

P{1} = [ 1 2; 3 4];
P{2} = [ 7 8; 9 10];
P{3} = [ 11 12; 13 14];
X = [P{:}]

X =

     1     2     7     8    11    12
     3     4     9    10    13    14

然后某种 reshape() 到达你想要的地方。

You might be able to get away with:

P{1} = [ 1 2; 3 4];
P{2} = [ 7 8; 9 10];
P{3} = [ 11 12; 13 14];
X = [P{:}]

X =

     1     2     7     8    11    12
     3     4     9    10    13    14

Then some sort of reshape() to get to where you want to be.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文