如何重塑单元格数组行到新的向量?

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个向量也是如此。
有什么想法?
3评论
克里斯托Antonakopoulos
克里斯托Antonakopoulos 2015年11月26日
是的,这正是我的本意。抱歉造成误解,但下面的答案中的代码正是我所需要的

登录评论。

接受的答案

大卫年轻
大卫年轻 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} 是第一组的连接,以此类推。
当然,您需要检查它是否对您的数据正确工作。
1评论
克里斯托Antonakopoulos
克里斯托Antonakopoulos 2015年11月26日
谢谢,这正是我需要的。它起作用了,特别是第一行真的很有帮助,因为我在单元格处理方面没有太多经验。

登录评论。

更多答案(0)

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!