Matlab 2019b中如何将Excel读取的文本与数字生成组合?
在Matlab 2019b中生成含混合类型的单元格数组笛卡尔积组合
核心思路
由于Matlab 2019b没有内置combinations函数,且combvec仅支持数值类型,我们可以通过手动实现笛卡尔积的方式处理混合类型(数字、文本)的单元格数组,核心是利用网格索引或循环遍历所有元素配对。
步骤1:提取并整理目标列
假设你已将Excel数据导入为单元格数组data(5×6),先提取最后两列的value1和value2:
% 提取Excel表格最后两列 col_value1 = data(:, end-1); col_value2 = data(:, end); % 可选:若需基于唯一值生成无重复组合,先去重(保留原顺序) unique_v1 = unique(col_value1, 'stable'); unique_v2 = unique(col_value2, 'stable');
若不需要去重,直接使用原列
col_value1和col_value2即可。
步骤2:生成笛卡尔积组合
以下两种方法均可生成混合类型的单元格数组组合:
方法一:用ndgrid快速生成(推荐)
通过网格索引映射到单元格元素,高效生成所有组合:
% 生成网格索引矩阵 [idx1, idx2] = ndgrid(1:length(unique_v1), 1:length(unique_v2)); % 将索引转换为线性索引,提取元素并组合成N×2的单元格数组 combinations = [unique_v1(idx1(:)), unique_v2(idx2(:))];
如果你的目标是生成4×2的组合,只需确保unique_v1和unique_v2各包含2个唯一值即可(2×2=4行)。若需截取前4组,可添加:
combinations = combinations(1:4, :);
方法二:嵌套循环(逻辑直观)
适合需要自定义配对规则的场景:
% 初始化空单元格数组 combinations = cell(0, 2); % 遍历所有元素配对 for i = 1:length(unique_v1) for j = 1:length(unique_v2) combinations = [combinations; {unique_v1(i), unique_v2(j)}]; end end
注意事项
- 单元格数组天然支持混合类型(数字、字符数组),无需额外类型转换;
- 若Excel中的数字以文本格式导入(如
'3'),会被存储为字符数组,单元格数组可直接处理;若为数值格式(如3),存储为double类型,同样兼容。
内容的提问来源于stack exchange,提问作者Virgo93
相关产品推荐
相关产品推荐

