Matlab 将向量附加到矩阵上
我有一个矩阵Matlab 将向量附加到矩阵上,matlab,vector,matrix,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 我为上面的代码实现了
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]
这里有什么问题?是因为我想把两种不同类型的向量结合起来吗?如何获得(1000401)维矩阵而不是(1000,2)维矩阵
我觉得我要么需要为字符存储相应的ASCII值,要么需要为用户选择管理一个单独的向量。但是,如果没有上述两种方法,是否可能??请帮忙 我花了一些时间才意识到问题所在。你确实无法得到包含字母的矩阵 如果您真的想这样做,解决方案是将所有内容存储在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))
我花了一些时间才意识到问题所在。你确实无法得到包含字母的矩阵 如果您真的想这样做,解决方案是将所有内容存储在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))
另一种可能性是使用结构。您可以在结构名称后面附加字母以查找相应的数组。放置在结构中不同点上的所有阵列的大小可能不同,不必与您的阵列大小相同。以下是在您的代码中实现的:
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;
您需要注意的是不要两次使用该元素,因为您将覆盖以前的数据。或者,如果该元素已存在于数组中并向您发出警告,则执行测试。希望这有帮助。另一种可能性是使用结构。您可以在结构名称后面附加字母以查找相应的数组。放置在结构中不同点上的所有阵列的大小可能不同,不必与您的阵列大小相同。以下是在您的代码中实现的:
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;
您需要注意的是不要两次使用该元素,因为您将覆盖以前的数据。或者,如果该元素已存在于数组中并向您发出警告,则执行测试。希望这有帮助。好吧……这种方法解决了我的问题……谢谢!!让我们看看有没有人还有什么话要说……)好吧……这样就解决了我的问题……谢谢!!让我们看看是否有人还有其他话要说:)