Matlab中如何将41×41 cell处理为1×40结果并求和?
问题解决:生成1×40的全40数组并求和
首先,你的代码存在两个核心问题:
- 循环中每次赋值会直接覆盖
ccc,无法累积生成数组(如果你的实际代码是ccc(cc) = ...,那会得到1×41的数组——因为length(isSmaller)对41×41的cell返回41,循环会跑满41次); - 你需要的是1×40的结果,因此需要限制循环次数或对生成的数组做截取处理。
下面是几种可行的解决方案:
方案1:修正循环并截取结果
先生成包含41个40的数组,再截取前40个元素得到目标结果:
% 初始化数组存储每行计算结果 ccc = zeros(1, size(isSmaller, 1)); for cc = 1:size(isSmaller, 1) % 每行1的个数固定为41,减1后得到40 ccc(cc) = sum(isSmaller{cc,:} == 1) - 1; end % 截取前40个元素,得到1×40的目标数组 ccc_40 = ccc(1:40); % 对数组求和 total_sum = sum(ccc_40);
方案2:直接循环40次
无需后续截取,直接循环40行生成目标数组:
% 初始化1×40的空数组 ccc_40 = zeros(1, 40); for cc = 1:40 ccc_40(cc) = sum(isSmaller{cc,:} == 1) - 1; end % 求和 total_sum = sum(ccc_40);
方案3:无循环高效实现
因为所有cell元素都是1,每行的计算结果固定为40,可直接构造数组跳过循环:
% 直接生成1×40的全40数组 ccc_40 = repmat(40, 1, 40); % 或者更简洁的写法 ccc_40 = 40 * ones(1, 40); % 求和,结果固定为40×40=1600 total_sum = sum(ccc_40);
内容的提问来源于stack exchange,提问作者SH_IQ
相关产品推荐
相关产品推荐

