• 締切済み

転置行列

 大きさm×nの一次元配列に、m×nの行列Aの要素が, A00, A01, A02, ... , A0n-1, A10, A11, A12, ... , A1n-1, ... , Am-1,0, Am-1,1, ..., Am-1,n-1 の順に入っているとき、作業用の配列を使わないで、(あるいは大きさmまたはn程度の一次元配列を作業用に使って)、もとの領域に転置行列を入れる、すなわち、 A00, A10, A20, ... , Am-1,0, A01, A11, A21, ... , Am-1,1, ..., A0n-1, A1n-1, ... , Am-1,n-1 の順に要素を入れ替える効率のよい方法を探しています。ご存知の方ご教示ください。

みんなの回答

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.2

M×Nの配列をN×Mにするのですよね。 ということは 1,2,3 4,5,6 を 1,4 2,5 3,6 にする。ということでいいですか? ならMとNの大きい方、3×3で 1,2,3 4,5,6 0,0,0 を 1,4,0 2,5,0 3,6,0 にするということと理解しましたが違いますか? 改めて質問を読むと1,2,3,4,5,6を1,4,2,5,3,6にしたいということでしょうか?

akayoroshi
質問者

補足

> 1,2,3,4,5,6を1,4,2,5,3,6にしたいということでしょうか? そうです。そして、この例の場合一次元配列の大きさは2X3=6で、配列内には作業用に使える場所はないということです。

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.1

s=0; for(i=s;i<m;i++){ for(j=s;j<n;j++){ w=a(i,j); a(i,j)=a(j,i); a(j,i)=w; } s++; } これでどうかな?

akayoroshi
質問者

お礼

回答ありがとうございます。  mの値が1のときかnの値が1のとき、あるいはmの値とnの値が等しいときはこれでいいのですが、そうでないときにこのやり方ではうまくいかないのではないでしょうか。

関連するQ&A