如何重塑单元格数组行到新的向量?
4次浏览(最近30天)
显示旧的注释
我有一个变量Big_RIR_AVG,它是1*2611单元格。
Big_RIR_AVG(1)为59*1双
Big_RIR_AVG(2)是60*1的双精度
Big_RIR_AVG(3)是59*1单元格(数字+ Nan值作为字符串)
等等......通常行数可以不同类型也可以是double或cell。
我也有一个向量计数= [483 373 396 879 480]
它的和是2611,是初始变量列的长度。所以我想要5个新向量(483* 1373 * 1396 * 1879 * 1480 *1)第一个向量我想取Big_RIR_AVG(1,1:483)并取所有元素并创建这个大向量。其他4个向量也是如此。
有什么想法?
接受的答案
大卫年轻
2015年11月26日
编辑:大卫年轻
2015年11月26日
首先,有一个错误需要纠正。
Big_RIR_AVG (1)
不是59x1的double。它是一个包含59x1 double的标量单元格。这看起来像是一个细节,但如果您正在使用单元格数组,正确理解单元格数组索引是很重要的。然而,
Big_RIR_AVG {1}
是
59x1 double。如果不理解,请查看单元格数组的文档。
我认为您想要连接单元格数组的每个部分的内容。(这并不完全清楚,因为你给出的第一个输出向量的大小为483*1,但当它结合前483个输入向量时,它会比这个长得多。)这涉及到将数字的字符串表示形式转换为双精度变量。
首先,处理那些尴尬的字符串单元格数组。假设单元格数组都是列,每个字符串以合理的格式表示一个数字,这应该做到:
cellind = cellfun(@iscell, Big_RIR_AVG);
将单元格向量转换为double
BRA_noCells(cellind) = cellfun(@str2double, Big_RIR_AVG(cellind),...
“UniformOutput”、假);
只是复制双向量
BRA_noCells(~cellind) = Big_RIR_AVG(~cellind);
现在对数组的每个部分进行连接
计数= [483 373 396 879 480];
开始= cumsum([1计数]);%分段起始点
combinedVectors = cell(1, length(counts));
为K = 1:长度(计数)
combinedVectors{k} = vertcat(BRA_noCells{starts(k):starts(k+1)-1});
结束
然后
combinedVectors {1}
是第一组的连接,以此类推。
当然,您需要检查它是否对您的数据正确工作。