私は2x25x30の形式で3次元マトリックスをソートしようとしています。私はさまざまな結果を持つソート関数を使用しようとしました。私はインデックスを2番目の行を並べ替えるために2x750x30の形式で新しい行列を取得し続けています。 私のデータは、 - (1991 1992 1993; 1000 3200 2100)、 (1991 1992 1993; 3400 7000 5500)のように見えますが、2x25x30 のマトリックスです。第1列は暦年であり、これらは最終的な出力で維持される必要があります。ソートは2番目の行に基づいています。ありがとうございました! A
でMatlab列ごとの3Dマトリックスの並べ替え
1
A
答えて
0
アプローチ#1
入力配列として、あなたはbroadcasting with bsxfun
によって助け線形インデックスを使用することができます - で
A(:,:,1) =
1991 1992 1993
1000 3200 2100
A(:,:,2) =
1991 1992 1993
3400 7000 5500
out(:,:,1) =
1991 1993 1992
1000 2100 3200
out(:,:,2) =
1991 1993 1992
3400 5500 7000
-
[m,n,r] = size(A);
[~,idx] = sort(A(2,:,:))
idx2D = bsxfun(@plus,(idx-1)*m,(1:size(A,1))')
idx3D = bsxfun(@plus,idx2D,permute(m*n*(0:1),[1,3,2]))
out = A(idx3D)
サンプル入力、出力MATLAB 2016Bの自動放送、それほどきれいに見えるでしょう -
[m,n,r] = size(A);
[~,idx] = sort(A(2,:,:))
out = A((1:size(A,1))' + (idx-1)*m + permute(m*n*(0:r-1),[1,3,2]))
アプローチ#2
再びbsxfun
を使用して、しかし、2Dカラム割出しこの時間はそうように、第bsxfun-INGのを回避するのに役立つ配列を再形成 -
[m,n,r] = size(A);
[~,idx] = sort(A(2,:,:));
out = reshape(A(:,bsxfun(@plus,squeeze(idx),n*(0:r-1))),m,n,r)
+0
アプローチ2は素晴らしいです! bsxfunとsqueezeがどのように「変形」と一緒に働いているのか説明できますか?ありがとうございました – user2100039
関連する問題
- 1. 列ごとのテーブルの並べ替え
- 2. matlabでベクターを使って3D配列を並べ替える
- 3. Matlabは並べ替え、oringalマトリックスのランキングを得る
- 4. MATLABの並べ替え行列
- 5. Java。 2d配列の列ごとの並べ替え
- 6. 列の並べ替えと並べ替え
- 7. JavaScript並べ替えアイテム数月ごと
- 8. 値ごとにJqueryを並べ替え
- 9. SSRSマトリックスの列グループを並べ替える
- 10. SSRSマトリックス - 行を特定の列で並べ替える
- 11. jqGrid - 列ごとのデフォルトの並べ替え順
- 12. 列の並べ替えの矢印並べ替え
- 13. 並べ替え列
- 14. 未定義列の並べ替え/並べ替え(LINQ \ Entity Framework)
- 15. 3D numpy配列を特定の方法で並べ替える
- 16. 配列の並べ替え
- 17. ブートストラップ - 並べ替えの列
- 18. jqGrid列の並べ替え
- 19. 列名の並べ替え
- 20. ブートストラップ列の並べ替え
- 21. 列ごとにテーブルを並べ替えるjquery
- 22. 配列ごとにコレクションを並べ替える方法は?
- 23. ヒープの並べ替えと挿入の並べ替え
- 24. DB内での並べ替えとアプリケーションの並べ替え
- 25. 並べ替え前と並べ替え後の値のストリーム
- 26. RubyでTSortを使用して配列の並べ替えと並べ替え
- 27. 配列とindexOf()ランタイムの並べ替え
- 28. JSON配列のフィルタリングと並べ替え
- 29. フレックスボックス:並べ替えとスタックの列
- 30. 選択並べ替え並べ替え
2行目の並べ替えはどういう意味ですか?最初の次元、2番目または3番目にソートすることができます。 – karakfa
データと予想される出力を作成するコードを提供すると便利です。 – Suever
2x25x30では、それはヘッダーとして機能する暦年ではない行です。この例では、暦年は1991年、1992年、1993年です。この行はソートされていませんが、その下の行はソートされていません。ありがとうございます – user2100039