我有一个矩阵
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选项管理单独的向量。但是,没有上述两种方法可能吗?请帮助!!
答案 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;
您需要注意的是没有使用该元素两次,因为您将覆盖以前的数据。如果元素已存在于数组中并发出警告,则执行测试。希望这会有所帮助。