【问题标题】:Subscripted assignment dimension mismatch (matlab)下标赋值维度不匹配(matlab)
【发布时间】:2015-10-02 16:37:54
【问题描述】:

input_cell= {'ABC','ACB','BCA'}的代码没问题

代码无法为input_cell= {'ABC','ACB','BCAD'}运行

谁能帮我解决这个错误?

 input_cell= {'ABC','ACB','BCAD'}
 %the code is ok for  input_cell= {'ABC','ACB','BCA'}
 data=[];
for i=1:numel(input_cell)

p=strsplit(input_cell{i},' ')
m=cell2mat(p(:))
m=m-'?'

[~,k]=sort(m);
%compare each pair
M = bsxfun(@(a,b)(a<b)+0.5*(a==b),k,k')
vector = reshape(M.',[],1)  %# Collect the row contents into a column vector
vector = vector' % change from columns into 1 row
data(i,:)= vector  % data matrix inludes all vectors
end

【问题讨论】:

  • 您输入的字符串中有一个是 4 个字符,而其他的是 3 个字符。我没有写答案,因为我不知道这段代码在做什么来纠正并为您提供所需的输出。
  • strsplit 做了什么
  • @kgk 你让它工作了吗?

标签: matlab matrix vector


【解决方案1】:

您可以通过使用结构来解决此问题。在结构中,每个单元格的尺寸可以不同。

【讨论】:

  • 单元格元素的尺寸也可以变化。这是一个松散的答案。
  • 是的,它适用于结构,因为结构包含单元格元素。
【解决方案2】:

如果您的data 变量可以是单元格,则此方法有效:

 input_cell= {'ABC','ACB','BCAD'}
 %the code is ok for  input_cell= {'ABC','ACB','BCA'}
 data={};
for i=1:numel(input_cell);
p=input_cell{i}(:);
[~,k]=sort(p);
%compare each pair
M = bsxfun(@(a,b)(a<b)+0.5*(a==b),k,k')
vector = reshape(M.',[],1)  %# Collect the row contents into a column vector
vector = vector' % change from columns into 1 row
data{i}= num2cell(vector(:,:))  % data matrix inludes all vectors
end

结果数据变量:

data = {1x9 cell}    {1x9 cell}    {1x16 cell}

希望对你有帮助

【讨论】:

  • 如何查看修改后代码中数据的值?
  • 所以 data 现在是一个包含 3 个单元格的单元格数组。 data{1} 访问第一个单元格,data{1}(1) 将索引第一个单元格的第一个元素(data{1}(2 ) 访问第一个单元格的第二个元素等)。我认为 MathWorks 对元胞数组索引的解释不是很好,Matlab Central 的这个例子可能是一个很好的例子:blogs.mathworks.com/loren/2006/06/21/…
  • 你的最终目标是什么?
猜你喜欢
  • 2013-05-30
  • 2013-07-03
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 2015-04-11
  • 1970-01-01
  • 2017-01-26
相关资源
最近更新 更多