Matlab如何将不同长度nx1数组合并为100×m数组并填充N/A
Matlab不等长1维数组合并解决方案
实现思路
通过预分配缺失值填充的目标矩阵,再按位置填充每个数组的有效元素即可解决维度不匹配问题,Matlab中数值类的标准缺失值用NaN标识,可直接参与后续大部分数值运算,不需要额外判断。
具体操作步骤
- 第一步:将所有待合并的100个
n×1数组存入cell数组,方便统一遍历
% 示例:将arr1到arr100存入cell,批量生成数组的场景可直接在生成时写入cell arr_cell = {arr1, arr2, arr3, ..., arr100};
- 第二步:计算所有数组的最大长度
m
len_list = cellfun(@length, arr_cell); m = max(len_list);
- 第三步:预分配目标矩阵,默认填充
NaN(即需求中的N/A)
注意:你需求中写的目标维度为
100×m是每个原数组作为行的场景,示例中是每个原数组作为列的m×2场景,两种场景的代码分别如下:
场景1:目标维度100×m,每个原数组对应结果的一行
result = NaN(100, m); for i = 1:100 current_arr = arr_cell{i}; result(i, 1:length(current_arr)) = current_arr'; % 转置为行向量后赋值 end
场景2:和示例一致,每个原数组对应结果的一列,目标维度
m×100
result = NaN(m, 100); for i = 1:100 current_arr = arr_cell{i}; result(1:length(current_arr), i) = current_arr; end
- 可选步骤:如果需要显式显示为字符串
N/A,可将结果转为cell数组
result_cell = cell(size(result)); result_cell(~isnan(result)) = num2cell(result(~isnan(result))); result_cell(isnan(result)) = {'N/A'};
示例验证
以你给出的两个测试数组为例,运行场景2的代码,得到的输出完全符合预期:
23 25 31 85 6 41 22 8 NaN 12 NaN 66
内容的提问来源于stack exchange,提问作者A.Rainer
相关产品推荐
相关产品推荐

