gpt4 book ai didi

matlab - 如何在 MATLAB 中将不同长度的单元累加到矩阵中?

转载 作者:太空宇宙 更新时间:2023-11-03 19:16:46 25 4
gpt4 key购买 nike

所以,我有一个由不同长度的 1xN 向量组成的元胞数组。我想将它们附加到一个矩阵中,以便我可以用 imagesc 显示它们。显然矩阵必须是最大向量的宽度。我目前的代码如下:

tcell = {[1,2,3], [1,2,3,4,5], [1,2,3,4,5,6], [1], []};
lens = cellfun('length', tcell);
rmat = NaN(length(tcell), max(lens));
for i = 1:length(tcell)
rmat(i, 1:lens(i)) = tcell{i};
end

有人知道此类问题的矢量化解决方案吗?由于 MATLAB 的 JIT,我并不真正担心这个循环的速度。我只是想扩展我的知识,这是我在编程中经常遇到的情况。

最佳答案

这是一个使用 cellfun 的解决方案用 anonymous function首先用 NaN 填充每个单元格值,然后 vertcat将单元格内容放入矩阵:

tcell = {[1 2 3], [1 2 3 4 5], [1 2 3 4 5 6], [1], []};  % Sample cell array

maxSize = max(cellfun(@numel, tcell)); % Get the maximum vector size
fcn = @(x) [x nan(1, maxSize-numel(x))]; % Create an anonymous function
rmat = cellfun(fcn, tcell, 'UniformOutput', false); % Pad each cell with NaNs
rmat = vertcat(rmat{:}); % Vertically concatenate cells

输出:

rmat =

1 2 3 NaN NaN NaN
1 2 3 4 5 NaN
1 2 3 4 5 6
1 NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN NaN

关于matlab - 如何在 MATLAB 中将不同长度的单元累加到矩阵中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3054437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com