いくつかの次元を持つことができる行列をエントリとして持っています:n × m
またはn × m × p
またはn × m × p × q
または...
私がやりたいことは、次のような最後の次元にアクセスすることです:
data = input(:,:,1)
問題は、の数:
が変わる可能性があることです。
いくつかの次元を持つことができる行列をエントリとして持っています:n × m
またはn × m × p
またはn × m × p × q
または...
私がやりたいことは、次のような最後の次元にアクセスすることです:
data = input(:,:,1)
問題は、の数:
が変わる可能性があることです。
配列へのインデックスは、次を含む文字列にすることができるという事実を利用する必要があります':'
。
>> 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
参照してください。
少しハックですが、これを行う方法は次のとおりです。
data = rand(2,2,3);
eval(['data(' repmat(':,',1,ndims(data)-1) '1)'])
これにより、(乱数に応じて)次のようになります。
ans =
0.19255 0.56236
0.62524 0.90487
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){:}
動作します。