如何重写我的代码没有循环?

8次浏览(最近30天)
博季诺夫Aronov
博季诺夫Aronov 2021年8月22日
如何在没有循环的情况下重写代码:
研究生= 0(大小(x));
i = 1:长度(x)
j = 1:长度(f)
Grad(i) = Grad(i) + 2*GradW(i,j).*dev(j);
结束
结束
谢谢。

接受的答案

沃尔特·罗伯森
沃尔特·罗伯森 2021年8月22日
Lenth (f)与代码的其他部分没有明显的关系。f是否比dev短,所以你只想做dev的一个子集?如果你想要dev中的所有元素,那么使用dev中的元素数,而不是f中的元素数。
初始化Grad为size(x),但只将i迭代为length(x),而不是x中的元素数量。
长度(x)或大小(x)与GradW或dev的大小之间的关系并不明显。
GradW =(1:5)。*(2:4)。”
GradW = 3×5
2 4 6 8 10 3 6 9 12 15 4 8 12 16 20
Dev = [-2 3 -4 5 -6]
dev = 1×5
2 3 -4 5 -6
x = randi(9, 1,大小(GradW,1)))%内容实际上没有使用,但形状是
x = 1×3
1 4 3
f = randi(9, 1,大小(GradW,2)))%内容实际上没有使用,但长度是
f = 1×5
8 9 6 8 7
答案1 = 2* dev(:),大小(x))
answer1 = 1×3
-72 -108 -144
研究生= 0(大小(x));
i = 1:长度(x)
j = 1:长度(f)
Grad(i) = Grad(i) + 2*GradW(i,j).*dev(j);
结束
结束
answer2 =研究生
answer2 = 1×3
-72 -108 -144
你们可以看到 可能的 简单的公式 answer1, 但是因为你的大小与你计算的变量无关,我们不能确定。
强迫答案是x的形状似乎很奇怪;让它成为列向量更有意义(在这种情况下跳过answer1的重塑())
1评论
博季诺夫Aronov
博季诺夫Aronov 2021年8月22日
正确的。
1) length(x)之所以存在,是因为其他多个数组的长度都是从length(x)推导出来的。您当然是对的:在这里使用length(dev)可以获得更健壮的代码。
2)同样,使用length(GradW(:,1))比使用length(f)更好。我的动机和1)一样
1)-2)建议代码:
Grad = 2*GradW * dev(:);
做我想做的事我知道你会想出一个非常简单的办法来解决我的问题。谢谢。

登录评论。

更多的答案(0)

标签

s manbetx 845


释放

R2021a

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!