12

いくつかの次元を持つことができる行列をエントリとして持っています:n × mまたはn × m × pまたはn × m × p × qまたは...

私がやりたいことは、次のような最後の次元にアクセスすることです:

data = input(:,:,1)

問題は、の数:が変わる可能性があることです。

4

6 に答える 6

13

配列へのインデックスは、次を含む文字列にすることができるという事実を利用する必要があります':'

>> data = rand(2, 2, 2, 5);
>> otherdims = repmat({':'},1,ndims(data)-1);
>> data(otherdims{:}, 1)
ans(:,:,1) =
    7.819319665880019e-001    2.940663337586285e-001
    1.006063223624215e-001    2.373730197055792e-001
ans(:,:,2) =
    5.308722570279284e-001    4.053154198805913e-001
    9.149873133941222e-002    1.048462471157565e-001

詳細については、ドキュメントをsubsref参照してください。

于 2013-11-13T15:36:27.223 に答える
5

少しハックですが、これを行う方法は次のとおりです。

data = rand(2,2,3);

eval(['data(' repmat(':,',1,ndims(data)-1) '1)'])

これにより、(乱数に応じて)次のようになります。

ans =

      0.19255      0.56236
      0.62524      0.90487
于 2013-11-13T14:08:03.383 に答える
0

GNU Octave の読者がここにたどり着いた場合に備えて。

@Rody Oldenhuisの答えは、Octaveでワンライナーとして書くことができます:

> data = reshape(1:8, 2, 2, 2);
> data({':'}(ones(1,ndims(data)-1)){:}, 1)
ans =

   1   3
   2   4

ここ:

{':'}(ones(1,ndims(data)-1)){:}

意味:

tmp = {':'};
tmp = tmp(ones(1,ndims(data)-1));
tmp{:}

もちろん、repmat({':'},1,ndims(data)-1){:}動作します。

于 2016-11-10T02:07:51.550 に答える