将向量附加到矩阵

时间:2013-11-14 16:16:53

标签: matlab vector matrix

我有一个矩阵

 DataSet(1000,400)

我希望将每一行复制到最初声明为

的最终矩阵中
FinalDataSet=[]

我遵循的复制规则如下,基于用户输入

 For any row i in "DataSet"
      if user enters a character X
          Add to FinalDataSet the vector (X,All Elements of DataSet(i))
      else do nothing

我为上面的

实现了以下代码
n=size(DataSet,1);
for i=1:n
     element=inputdlg('Enter Character');
     if(~isempty(element))
          FinalDataSet=[FinalDataSet;[element DataSet(i,:)]];
     end
 end

(如果按下取消,我观察的输入对话框返回[]

但是,当我执行上面的代码时 FinalDataSet具有以下形式

 'H'    [1x400 double]
 'g'    [1x400 double]
 'i'    [1x400 double]

这是什么问题?是因为我试图结合两种不同类型的载体吗?如何获得(1000,401)维矩阵而不是(1000,2)矩阵?

我觉得我需要为字符存储相应的ASCII值,或者为User选项管理单独的向量。但是,没有上述两种方法可能吗?请帮助!!

2 个答案:

答案 0 :(得分:1)

我花了一些时间才意识到问题所在。你确实无法得到一个包含字母的矩阵。

如果您真的想要这个,那么解决方案就是将所有内容存储在1000x401单元格数组中,如下所示:

c =  ['H' num2cell(1:10)]

然而,你会放弃通过矩阵处理获得的相当多的便利/效率。

因此我建议这个替代方案:

如果您满意将字符存储为数字,可以执行以下操作:

element = {'H'} % inputdlg returns a 1x1 cell
i=1;
DataSet = rand(1000,400);

v = [element{1}+0 DataSet(i,:)]

要查看它是哪个字母,您可以使用char

char(v(1))

答案 1 :(得分:0)

另一种可能性是使用结构。您可以在结构名称后面附加字母以查找相应的数组。放置在结构中不同点的所有阵列的大小可以不同,并且不必像您的大小一样。这是在你的代码中实现的:

n=size(DataSet,1);
for i=1:n
     element=inputdlg('Enter Character');

     if(~isempty(element))
         FinalDataSet.element=DataSet(i,:)
     end
end

通过使用相应元素调用结构来读取结构中的数据,让我们在这里使用x作为示例。

xdata = FinalDataSet.x;

您需要注意的是没有使用该元素两次,因为您将覆盖以前的数据。如果元素已存在于数组中并发出警告,则执行测试。希望这会有所帮助。