Jupp 发表于 2007-7-12 08:54

问一个纠缠很久的很入门的问题

比方说我要建立一个数组,包含另一数组的每个元素两次。a=要使得b=。
为此写下
a=;
for i=1:4
b(i)=
end
报错为
???In an assignmentA(I) = B, the number of elements in B and
I must be the same.
请问有什么办法解决么?

foxfire_cn 发表于 2007-7-12 09:30

原帖由 Jupp 于 2007-7-12 09:54 发表 http://www.dolc.de/forum/images/common/back.gif
比方说我要建立一个数组,包含另一数组的每个元素两次。a=要使得b=。
为此写下
a=;
for i=1:4
b(i)=
end
报错为
???In an assignmentA(I) = B, the...


好像如果这样写就会变成一个4x2的矩阵的!$考虑$

sallies 发表于 2007-7-12 11:06

a=;
for i=1:4
b(i*2-1:i*2)=;
end
这样就可以了。

软软熊 发表于 2007-7-12 14:30

好像有很多办法唉
a=
a=
b=a(:)'

[ 本帖最后由 软软熊 于 2007-7-12 15:33 编辑 ]

软软熊 发表于 2007-7-12 14:38

或者

a=
b=repmat(a,2,1)
b=a(:)'

软软熊 发表于 2007-7-12 14:48

再或者试试这个

;)
kron(a,)

recbio 发表于 2007-7-12 15:56

建议用#4的方法,
这是最快和最节省内存的。
可以这样写:

>> a= ;

>> b= reshape( [ a ; a] , 1, length(a)*2)

b =

   1   1   2   2   3   3   4   4

Jupp 发表于 2007-7-12 22:37

谢谢大家,最后我还是采取三楼的写法。。因为其他写法的指令对我来说有点眼花缭乱。

软软熊 发表于 2007-7-13 08:25

原帖由 recbio 于 2007-7-12 16:56 发表 http://www.dolc.de/forum/images/common/back.gif
建议用#4的方法,
这是最快和最节省内存的。
可以这样写:

>> a= ;

>> b= reshape( [ a ; a] , 1, length(a)*2)

b =

   1   1   2   2   3   3   4   4
对头,这种简单的我自己也是用这个方法写。后面两种就是提个思路,碰到复杂的情况可以用。

软软熊 发表于 2007-7-13 08:31

原帖由 Jupp 于 2007-7-12 23:37 发表 http://www.dolc.de/forum/images/common/back.gif
谢谢大家,最后我还是采取三楼的写法。。因为其他写法的指令对我来说有点眼花缭乱。
唉,如果你真的要用Matlab编程的话还是劝你改掉上来就用for循环的习惯。Matlab之所以简单就是有强大的矩阵操作功能。。。
前两天一老哥给我看一程序,3维矩阵,for了3次,一长串,把我看得一愣一愣的,结果改成两句话就搞定了。
页: [1] 2
查看完整版本: 问一个纠缠很久的很入门的问题