0

A = rand(3, 4, 5);3次元配列があり、ベクトルを抽出したいとしましょうA(1,1,:)。このように書くと、出力は size[1 1 5]の単純なベクトルではなく、 size の 3D 配列になります[1 5]。これにより、たとえば、別のサブ配列に割り当てることができなくなりますB(1,:)(「添字付きの割り当て次元の不一致」が発生します)。元の寸法を維持せずにベクトルを抽出する最良の方法は何ですか?
私は2つのアプローチを考えることができます:

  • 下付き文字を使用する代わりに、目的の要素の線形インデックスを計算します。

    targetInds = 1:5;
    fixedInds = repmat(1,size(targetInds));
    inds = sub2ind(size(A), fixedInds, fixedInds, targetInds);
    size(A(inds))
    
    ans =
         1     5
    
  • 使用reshape:

    subA = reshape(A(1,1,:),1,size(A,3));
    size(subA)
    
    ans =
         1     5
    

2 番目の方法は簡単に思えますが、効率が悪いと思います。どちらも追加のコードが必要です。もっと簡単な方法はありますか?

4

2 に答える 2