找回密码
 注册

微信登录

微信扫一扫,快速登录

萍聚头条

查看: 3897|回复: 16

[其他学科] 问一个纠缠很久的很入门的问题

[复制链接]
发表于 2007-7-12 09:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册 微信登录

×
比方说我要建立一个数组,包含另一数组的每个元素两次。a=[1,2,3,4]要使得b=[1,1,2,2,3,3,4,4]。
为此写下
a=[1,2,3,4];
for i=1:4
b(i)=[a(i),a(i)]
end
报错为
???  In an assignment  A(I) = B, the number of elements in B and
I must be the same.
请问有什么办法解决么?
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2007-7-12 10:30 | 显示全部楼层
原帖由 Jupp 于 2007-7-12 09:54 发表
比方说我要建立一个数组,包含另一数组的每个元素两次。a=[1,2,3,4]要使得b=[1,1,2,2,3,3,4,4]。
为此写下
a=[1,2,3,4];
for i=1:4
b(i)=[a(i),a(i)]
end
报错为
???  In an assignment  A(I) = B, the  ...



好像如果这样写就会变成一个4x2的矩阵的!$考虑$
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2007-7-12 12:06 | 显示全部楼层
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2007-7-12 15:30 | 显示全部楼层
好像有很多办法唉
a=[1,2,3,4]
a=[a; a]
b=a(:)'

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

评分

1

查看全部评分

Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2007-7-12 15:38 | 显示全部楼层
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2007-7-12 15:48 | 显示全部楼层
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2007-7-12 16:56 | 显示全部楼层
建议用#4的方法,
这是最快和最节省内存的。
可以这样写:

>> a=[1,2,3,4] ;

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

b =

     1     1     2     2     3     3     4     4
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-12 23:37 | 显示全部楼层
谢谢大家,最后我还是采取三楼的写法。。因为其他写法的指令对我来说有点眼花缭乱。
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2007-7-13 09:25 | 显示全部楼层
原帖由 recbio 于 2007-7-12 16:56 发表
建议用#4的方法,
这是最快和最节省内存的。
可以这样写:

>> a=[1,2,3,4] ;

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

b =

     1     1     2     2     3     3     4     4

对头,这种简单的我自己也是用这个方法写。后面两种就是提个思路,碰到复杂的情况可以用。
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2007-7-13 09:31 | 显示全部楼层
原帖由 Jupp 于 2007-7-12 23:37 发表
谢谢大家,最后我还是采取三楼的写法。。因为其他写法的指令对我来说有点眼花缭乱。

唉,如果你真的要用Matlab编程的话还是劝你改掉上来就用for循环的习惯。Matlab之所以简单就是有强大的矩阵操作功能。。。
前两天一老哥给我看一程序,3维矩阵,for了3次,一长串,把我看得一愣一愣的,结果改成两句话就搞定了。
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-13 11:21 | 显示全部楼层
但是这么多操作指令我还不会用
比方说
a=[1,2,3,4]
b=[2,3,4,5]
我想让a和b的每一项相乘生成到c里
就是
c=[a1b1,a2b2,a3b3,...,aibi]
我知道应该有这样的操作指令但我不会,我想到的却只有用for来写。。。

[ 本帖最后由 Jupp 于 2007-7-13 11:26 编辑 ]
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2007-7-13 11:43 | 显示全部楼层
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2007-7-13 15:02 | 显示全部楼层
原帖由 Jupp 于 2007-7-13 11:21 发表
但是这么多操作指令我还不会用
比方说
a=[1,2,3,4]
b=[2,3,4,5]
我想让a和b的每一项相乘生成到c里
就是
c=[a1b1,a2b2,a3b3,...,aibi]
我知道应该有这样的操作指令但我不会,我想到的却只有用for来写。。。

这不就直接
c=[a;b]
c=c(:).'
建议看一下最基本的Matlab的书,前几页就会讲到。
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2007-7-13 15:40 | 显示全部楼层
原帖由 软软熊 于 2007-7-13 15:02 发表

这不就直接
c=[a;b]
c=c(:).'
建议看一下最基本的Matlab的书,前几页就会讲到。


说的有一定的道理,因为matlab的循环for的效率很低很低。所以比较大的循环不推荐使用。不过考虑到代码的可维护性,我觉得for循环还是有存在的必要,因为使用for的话,程序的语义非常的明确,以后别人用的时候,包括半年以后你自己用的时候,都有很多的好处。如果for实在拖后腿,建议可以先写个for作为注释,然后再使用matlab自己的语句。我现在就是这么平衡的。
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-15 20:19 | 显示全部楼层
原帖由 aileute 于 2007-7-13 15:40 发表


说的有一定的道理,因为matlab的循环for的效率很低很低。所以比较大的循环不推荐使用。不过考虑到代码的可维护性,我觉得for循环还是有存在的必要,因为使用for的话,程序的语义非常的明确,以后别人用的时 ...

嗯。。。自己matlab用的不多,学的不多就写不出好的句子,也看不懂好的句子

c=[a;b]
c=c(:).'
这样的句子不是自然的思路就不会写了
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2007-7-22 23:46 | 显示全部楼层
原帖由 Jupp 于 2007-7-13 11:21 发表
但是这么多操作指令我还不会用
比方说
a=[1,2,3,4]
b=[2,3,4,5]
我想让a和b的每一项相乘生成到c里
就是
c=[a1b1,a2b2,a3b3,...,aibi]
我知道应该有这样的操作指令但我不会,我想到的却只有用for来写。。。



这个不是点乘吗?
c=a.*b

还是我没有理解对意思?
应该没错的啊~~
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2007-7-23 11:56 | 显示全部楼层
原帖由 fiona_chen 于 2007-7-22 23:46 发表



这个不是点乘吗?
c=a.*b

还是我没有理解对意思?
应该没错的啊~~

你是对的,呵呵,我没看仔细,还以为他还是要做排列呢
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册 微信登录

本版积分规则

Archiver|手机版|AGB|Impressum|Datenschutzerklärung|萍聚社区-德国热线-德国实用信息网

GMT+2, 2025-7-8 03:28 , Processed in 0.093532 second(s), 32 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表