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

标签 matlab tensor

我想使用 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/

相关文章:

c# - 如何从照片中获取任意颜色的 channel ?

image-processing - 在 MATLAB 中处理图像的一部分

python - 如何在 Python 中将 Ragged Tensor 转换为 Tensor?

python - 为什么 Keras Conv1D 层的输出张量没有输入维度?

python - 在 PyTorch 中计算张量/外积空间中的线性层非常慢

python - 如何找到3维数组中最接近的数组

python - 在 Python 中保存和重新加载变量,保留名称

matlab - 使用 matlab 将 RGB 图像转换为灰度图像并重命名

matlab - 如何以编程方式调用 MatLab 中的缩放事件?

python - 如何将 PyTorch 张量列表转换为 float 列表?