24小时热门版块排行榜    

查看: 1163  |  回复: 10
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

l1376777571

新虫 (初入文坛)

[求助] Matlab基础问题求助 已有2人参与

求教各位大神,一个数减一个向量得到一个向量,那么如何让一个矩阵的每一个数都减去这个向量呢?除了for循环
请教各位朋友

发自小木虫Android客户端
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

细节
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

512095518

专家顾问 (正式写手)

【答案】应助回帖

引用回帖:
3楼: Originally posted by l1376777571 at 2016-11-19 14:25:37
这么说吧
a=magic(5);
b=;
for m=1:5
    for n=1:5
         a(m,n)=a(m,n)-b;
    end
end
这样得到的矩阵a的每一个元素都是一个向量,我想问问,有没有什么办法更加快捷,避免for循环,谢谢啦!
...

a = magic(3);
a = num2cell(a);
b = 1:4;
s = arrayfun(@(x)x{:}-b,a,'UniformOutput',0);
所有的矩阵都只能放在元胞数组里。所以你的例子for循环会报错。
我按照你的要求,用arrayfun函数替代for循环,但是前提是你的a必须要转化成元胞数组。最后输出的s就是你要的结果。
没有极限,只有超越!
7楼2016-12-13 19:27:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 11 个回答

godzilla

金虫 (小有名气)

不清楚你想达到什么效果,建议举例说明。

发自小木虫IOS客户端
2楼2016-11-19 11:48:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

l1376777571

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by godzilla at 2016-11-19 11:48:39
不清楚你想达到什么效果,建议举例说明。

这么说吧
a=magic(5);
b=[1,2,3.4];
for m=1:5
    for n=1:5
         a(m,n)=a(m,n)-b;
    end
end
这样得到的矩阵a的每一个元素都是一个向量,我想问问,有没有什么办法更加快捷,避免for循环,谢谢啦!

发自小木虫Android客户端
细节
3楼2016-11-19 14:25:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

godzilla

金虫 (小有名气)

引用回帖:
3楼: Originally posted by l1376777571 at 2016-11-19 14:25:37
这么说吧
a=magic(5);
b=;
for m=1:5
    for n=1:5
         a(m,n)=a(m,n)-b;
    end
end
这样得到的矩阵a的每一个元素都是一个向量,我想问问,有没有什么办法更加快捷,避免for循环,谢谢啦!
...

>> a=magic(5);
b=[1,2,3,4];
for m=1:5
    for n=1:5
         a(m,n)=a(m,n)-b;
    end
end
带有下标的赋值维度不匹配。
a是5×5的矩阵,a(m,n)=a(m,n)-b运算后a(m,n)变为1×4的向量,运算时会出现错误。

可以试试这个:
kron(a,ones(size(b)))-kron(ones(size(a)),b);
4楼2016-11-19 14:52:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见