本帖最后由 kaaaf123 于 2014-11-11 19:26 编辑
有些东西你还是没有搞明白
['
',num2cell(a), ' |
这个东西的结果本身是一个1x5的cell,这个你自己执行下就知道了:
a = 1:3;
>> c = ['
',num2cell(a), ' |
c =
'
所以相当于你把5个东西赋值给b(:,1),而b(:,1)是三个位置,所以报错告诉你不匹配
而你原本的赋值是:
b(:,1)=num2cell(a)
左边b(:,1)是三个位置,右边num2cell(a)同样是三个,所以赋值没有问题
况且从你后边的循环可知,先不说赋值,首先这里的c就不是你要的样子,你要的应该是三个字符串
我已经说过几遍:这里num2cell(a)结果不是字符串,所以不能和字符串直接连接组成整体,组成的结果只会像上边的c那样,字符串和数字是分离的,不是你要的结果。只有字符串和字符串才能组成一个字符串,这也就是为什么你后边的循环是正确的:是因为num2str(a(i),'10.4d%')的结果是字符串(这里顺便说一句,num2str属于高级函数,性能比较低,如果追求性能建议还是尽量用低级函数实现,例如sprintf)
如果你要“使用向量化的思想来批量为b的第一列赋值.”,可以用一个matlab的辅助函数sprintfc:
A = cell(5,2);
b = 1:5;
A(:,2) = sprintfc('第%d行',b)
得到:
A(:,2) = sprintfc('第%d行',b)
A =
[] '第1行'
[] '第2行'
[] '第3行'
[] '第4行'
[] '第5行'
建议你查找代码问题的时候最好分步查找,把能拆开的步骤都拆开来看,例如,你如果愿意单独看一下:
['
',num2cell(a), ' |
到底是什么,即使不知道怎么改,你也会发现这个东西的结果根本就是不你要的,再继续分步,单独看一下num2cell(a)是什么,你或许就会发现这个东西根本就不是字符串,从而更深入的发现问题
这样分析会比你直接就盯着:
b(:,2)=['
',num2cell(a), ' |
??? Subscripted assignment dimension mismatch.
凭空猜测和想象来得实在