1

2 x 2 x 2 の 3 方向データ キューブを想像してください。

data = [1 2; 3 4];
data(:,:,2) = [5 6; 7 8]

この立方体 (つまり 2x2 マトリックス) から行と列のスライスを生成したいと考えています。このスライスの各要素は、3 モード ファイバーをランダムにサンプリングすることによって取得されます (つまり、n 番目のモード ファイバーは、n 番目のモードに沿って走るベクトルです)。この立方体には 4 つの 3 モード ファイバーがあり、そのうちの 1 つは f1 = [1 5]、もう 1 つは f2 = [2 6] など)。たとえば、1 つのスライスは次のようになります。

slice = [5 2; 3 4]

別のサンプリングがスライスにつながる可能性があります。

slice = [1 2; 7 8]

これを行う簡単な方法はありますか?

slice = datasample(data,1,3) を使用してみましたが、この関数はキューブから行と列のスライスをランダムに選択します (つまり、スライス = [1 2; 3 4] または [5 6; 7 8])。

4

3 に答える 3

0

次のソリューションは、どのキューブ サイズにも有効です。ツールボックスは必要ありません。

N = size(data,1); %//length of side of cube
r = randi(N,1,N^2)-1; %//this is the random sampling
data_permuted = permute(data,[3 1 2]); %//permute so that sampling is along first dim
slice = data_permuted((1:N:N^3)+r); %//sample using linear indexing 
slice = reshape(slice.',N,N); %//reshape into a matrix
于 2013-10-24T21:24:37.297 に答える