2015-05-15 63 views
0

我是一个matlab初学者。目前我正在使用保存文件,如何从矩阵中选择行

eval(['save(''results/loc_', num2str(location) ,''',''values'')']); 

我有54个位置。因此,在这种情况下,我将在一个名为'results'的新文件夹中保存名为loc_1,loc_2 ... loc_54的54个文件。每个文件的大小是15x7。在这种情况下,列的数量将始终保持不变。但是行数会改变。如果我只进行一次试用,那么'loc_1'只会给出3x7的值。如果我进行2次试验,那么'loc_1'会给出6x7的值,依此类推。在我的情况下,我想把'试用'作为一个变量,它的值是5.所以名为loc_1,loc_2,..,loc_54的每个文件都会给我15x7的值。

现在我想前5行(和所有的7列)从loc_1分开,需要将其储存在3个不同的文件,每个文件的大小将是5x7个。同样,我将不得不保存所有loc_numstr(位置)文件(总共54个文件)并将它们分开。然后我将有3组54个文件,每个文件的大小为5x7。在这种情况下,我正在进行5次试验,所以我将其分隔为每个文件大小的5x7。同样的4次试验,我需要考虑4x7等等。

任何形式的帮助将不胜感激。谢谢。

我想我有点复杂。你能解释一下这个例子吗?

我想询问是否我有例如基质: A = [1 2 3; 1 3 4; 4 5 7; 9 10 12; 13 16 18; 22 26 29]

以及如何采取第一2行,并将它们保存在另一个文件中,然后在接下来的2行,并将它们保存在另一个文件中,并在接下来的2行,并将它们保存在另一个文件?

例如,我想存储B = [1 2 3; 1 3 4],c = [4 5 7; 9 10 12]和d = [13 16 18; 22 26 29]

感谢

+0

你为什么使用'eval'?为什么不只是'save(['results/loc_',num2str(location)],values)'?你的问题也很难理解。什么是“价值”? – Dan

+1

我诚实地根本不能跟随你想要做的事情。要回答明确的问题,请参阅MATLAB的[矩阵索引](http://www.mathworks.com/company/newsletters/articles/matrix-indexing-in-matlab.html)文档。这里也不需要使用'eval'。使用['sprintf'](http://www.mathworks.com/help/matlab/ref/sprintf.html)或['strcat'](http://www.mathworks.com/help/matlab/ref/ strcat.html)来生成你的文件名。 – excaza

+0

我正在尝试使用保存,但我很难使用它。是的,我认为我有点复杂。你能解释一下这个例子吗?我通过编辑我的问题来举例说明。 – Chris33

回答

0

对于你的榜样,你可以使用数组切片,

a=[1 2 3 ; 1 3 4 ; 4 5 7 ; 9 10 12 ; 13 16 18 ; 22 26 29] 
for n = 1:3 
    %Indices for matrix section 
    j = 2*n; i = j-1; 
    %Get matrix section to save 
    b = a(i:j,:) 
    save(['results/loc_',num2str(n)], 'b') 
end 

我不知道保存是你想要的 - 这节省了MATLAB工作空间的变量。你想写数字,以便其他程序可以读取它们吗?

+0

请忽略'保存'。我正在使用许多文件来生成最终结果。然后我使用eval函数来保存结果。我现在有54个结果。这些文件被命名为loc_1,loc_2,... loc_54。每个文件的大小是15x7。我想要将结果文件中的行分开。例如,loc_1的大小为15x7。现在,我要保存前5行(一个5x7点阵)在loc_test1_1,那么接下来的5行作为(另一个5x7点阵)loc_test2_1,然后接下来的5行(另一5x7点阵)作为loc_test3_1。所以像这样,我们将有loc_1文件中的3个新集。在这里,我们有54个文件从loc_1到loc_54 – Chris33

+0

我不知道为什么你要保存文件的值和(我假设)在操作之间重新加载。通常写入磁盘的效率非常低,只能在matlab会话之间保存所需的值。如果我明白接下来要做什么,这将使用与上述完全相同的方法,但使用不同的文件名和索引。 –