gpt4 book ai didi

matlab - 动态创建一个 d 维张量

转载 作者:太空宇宙 更新时间:2023-11-03 20:15:20 25 4
gpt4 key购买 nike

我想使用 d 作为输入并且不使用 if 语句来创建一个 d 维张量,如下所示:

if d == 2
B = zeros(r,r);
for i = 1:r
B(i,i) = 1;
end
elseif d == 3
B = zeros(r,r,r);
for i = 1:r
B(i,i,i) = 1;
end
end

有没有更高效的方法?

最佳答案

您可以使用 accumarray :

f = @(d,r)accumarray(repmat((1:r).',1 , d), 1);

> f(2,5)
=
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1

这是 accumarray 的基本签名:

accumarray( subs , val )

使用 accumarray 我们可以创建一个 n 维数组,其中 subs 表示将填充到数组中的点的位置,val代表了他们的值(value)。

如果 subs 作为矩阵提供,它的列数决定了结果数组的维数,每行代表每个点的位置。

例如对于 d = 2r = 5 我们想创建一个 (5 x 5) 数组,其中有 1s以下位置:[1 1]、[2 2]、[3 3]、[4 4]、[5 5]

使用repmat我们可以创建subs:

subs = repmat ((1:5).' , 1, 2)

=
1 1
2 2
3 3
4 4
5 5

val 设置为 1 因此所有指定的位置都将由 1 填充。

.

关于matlab - 动态创建一个 d 维张量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48251186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com