gpt4 book ai didi

Matlab:奇数线性索引到具有单一维度的数组

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

我无法理解线性索引适用的情况。

对于二维数组,这看起来很直观:

>> clear x
>> x=[1 2;3 4]
x =
1 2
3 4
>> x([1 2])
ans =
1 3
>> x([1;2])
ans =
1
3

对于 3D 矩阵,这看起来很直观:

>> clear y
>> y(1:2,1:2,1)=x
y =
1 2
3 4
>> y(1:2,1:2,2)=x+10
y(:,:,1) =
1 2
3 4
y(:,:,2) =
11 12
13 14
>> y([1 2])
ans =
1 3
>> y([1;2])
ans =
1
3

对于第一个二维是单维的 3D 矩阵,这不是我所期望的:

>> clear y
>> y(1,1,1)=1
y =
1
>> y(1,1,2)=2
y(:,:,1) =
1
y(:,:,2) =
2
>> y([1 2])
ans(:,:,1) =
1
ans(:,:,2) =
2
>> y([1;2])
ans(:,:,1) =
1
ans(:,:,2) =
2

我本来期望与没有单一尺寸的 3D 矩阵完全相同。

是否有可以依赖的规则来预测线性索引的行为?

最佳答案

数组 x 和数组 ind线性索引规则如下(摘自 this great post by Loren Shure ):

  • 如果 xind 中至少有一个不是向量(也就是说,如果 xind 有多个非单一维度)输出具有与 ind 相同的形状(大小):

    >> x = rand(3,4);
    >> ind = [9 3];
    >> x(ind)
    ans =
    0.276922984960890 0.743132468124916

    >> x(ind.')
    ans =
    0.276922984960890
    0.743132468124916

    >> x = rand(2,3,4);
    >> ind = [1 2; 5 6];
    >> x(ind)
    ans =
    0.814723686393179 0.905791937075619
    0.632359246225410 0.097540404999410
  • 如果 xind 都是向量,则输出是一个与 x 具有相同方向的向量(即非单例的输出维度是 x 中的维度),以及与 ind 相同的元素数:

    >> x = 10:10:70;
    >> ind = [1 3 5];
    >> x(ind)
    ans =
    10 30 50

    >> x(ind.')
    ans =
    10 30 50

    >> x = reshape(10:10:70,1,1,[]); % 1×1×7
    >> ind = reshape([2 3 4],1,1,1,1,[]); % 1×1×1×1×3
    >> x(ind)
    ans(:,:,1) =
    20
    ans(:,:,2) =
    30
    ans(:,:,3) =
    40

为了完整性,如果应用两个或多个索引数组(因此这不再是线性索引),输出的形状由维度决定原始数组正在被索引,并且由每个索引数组的元素数。它与索引数组的形状无关,索引数组的形状像往常一样简单地按列主要顺序读取:

>> x = [10 20 30 40; 50 60 70 80];
>> x(2, [1 2; 3 4])
ans =
50 70 60 80

>> x(2, [1 2 3 4])
ans =
50 60 70 80

>> x(2, reshape([1 2 3 4],1,1,1,[]))
ans =
50 60 70 80

如果索引的数量少于 x 的维数,则在应用索引之前,x 的尾部维度将隐式折叠为一个:

>> x = [10 20 30 40; 50 60 70 80];
>> x(:,:,2) = x+100;
>> x([1 2], [1; 5; 7; 8])
ans =
10 110 130 140
50 150 170 180

关于Matlab:奇数线性索引到具有单一维度的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49661246/

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