如何在MATLAB中将不同尺寸cell数组转矩阵并筛选[7964x1 double]元素
在MATLAB中处理不同尺寸Cell数组的两个实用技巧
一、将多组尺寸/类型不同的Cell数组转换为矩阵数组
首先得明确:因为你的Cell里元素的尺寸、类型都不一样(比如2x4 double、1x4 double、3x4 int32),没办法直接把整个Cell转成一个统一的普通矩阵——普通矩阵要求所有元素维度一致、类型相同。不过可以根据你的需求用不同方式处理:
- 如果只是想单独取出每个Cell元素的矩阵(其实它们本身已经是矩阵了),直接用花括号访问就行,比如
mat1 = yourCell{1}就能取出第一个元素的矩阵; - 如果想把所有元素统一转换成double类型,同时保留各自的维度,用
cellfun批量处理很方便:% 批量转换所有元素为double类型,保留原维度结构 doubleCell = cellfun(@double, yourCell, 'UniformOutput', false); - 如果部分元素维度匹配(比如都是列数为4的矩阵),可以尝试用拼接函数整合:
但如果维度不匹配,这种方法会报错,使用前最好先做维度检查。% 竖拼所有列数为4的元素(前提是它们的列数一致) combinedMat = vertcat(yourCell{:});
二、提取仅包含[7964x1 double]维度的元素
这个需求可以通过遍历检查每个Cell元素的尺寸和类型来实现,用cellfun结合逻辑索引就能搞定:
% 定义筛选条件:严格匹配7964x1的尺寸,且是double类型 filterIdx = cellfun(@(x) isequal(size(x), [7964 1]) && isdouble(x), yourCell); % 提取符合条件的元素组成新的Cell数组 filteredCell = yourCell(filterIdx);
简单解释下:
isequal(size(x), [7964 1])确保元素的行列数完全符合要求;isdouble(x)进一步限定数据类型为double;- 最后用
filterIdx这个逻辑数组作为索引,直接从原Cell中捞出符合条件的元素。
内容的提问来源于stack exchange,提问作者Vidhi
相关产品推荐
相关产品推荐

