matlab菜鸟级问题。。。求会matlab的。。。

要把一个
A=4
5
6
7
8

变成 b=1 2
3 4
5 6
7 8

如果数字很多,不止这8个。。。该怎么用reshape?
[r,c]=size (a)

reshape(a,r/2,2)

为何出error啊。。。。

抱歉。。。各种菜鸟。。求详细解答!

>> A = [1:8]'
A =
1
2
3
4
5
6
7
8
>> b = reshape(A,2,4)'
b =
1 2
3 4
5 6
7 8
上面是过程,需要注意的是,matlab里面矩阵元素在内存中是按列排的,而你要的b是1~8按行排的4*2的矩阵,那么就只能先把Areshape成2*4的矩阵,然后再转置,才能够得到想要b。

如果数字很多,也类似做。
比如:
>> A=[1:10]'
A =
1
2
3
4
5
6
7
8
9
10
>> r = size(A,1)
r =
10
>> b = reshape(A,2,r/2)'
b =
1 2
3 4
5 6
7 8
9 10
注意得到r的时候必须用size(A,1),也就是得到A的第一维的size,即A的行数!这才是A数组的大小。实际上,size(A)=[10,1]。追问

Error using ==> reshape
Size arguments must be real integers.

Error in ==> reshape at 11
b = reshape(a,6,r/6)'

哦。。我的r是4999.。。能否在不是6的倍数的时候,最后补上几个0?

这又该如何编写呢。。。有劳大神。。。。

追答

这个,你得先给A补上几个0。
比如
A=[1:4999]';
r=size(A,1);
x = 6-mod(r,6);
A(r+1:r+x)=0;
b = reshape(A,6,(r+x)/6);
这样就好了。

追问

不好意思 我又来追问了!! 我会加分的!!

tangram_guid_1359781738334? Error using ==> reshape
To RESHAPE the number of elements must not
change.

Error in ==> reshape at 13
b = reshape(wind1,6,(r+x)/6);

为何又error了。。。呜呜

追答

你的error是出在一个程序内部的某一步吧,能把代码贴出来么?

追问

clc;
close all;

file_in = 'daily_average_wind_speed.xls';
file_out = '6h_average_wind_speed.xls';

wind1=a(:,2);
r = size(wind1,1);
x = 6-mod(r,6);
A(r+1:r+x)=0;
b = reshape(wind1,6,(r+x)/6);

有劳了!!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-30
reshape(A,m,n)是把A矩阵重新排列为一个m*n的矩阵,所以A里面一定要有m*n个元素;如果元素个数不匹配就报错了,你的应该就是这种情况。
另外,reshape是把A矩阵中的每个元素按照(1,1),(1,2)。。。(2,1),(2,2)。。。这样的顺序从新排列到m*n的新矩阵中,没办法把你上面说的A直接变成b。
相似回答