Java で 2 次元配列の行をスクランブルするにはどうすればよいですか?これは、多くの開発者がよく遭遇する問題です。 2 次元配列の行をシャッフルするには、Collections クラスの shuffle() メソッドを使用します。このメソッドは、コレクション内の要素の順序をランダムにシャッフルできます。まず、2 次元配列を List 形式に変換し、次に shuffle() メソッドを使用してリストをランダムに並べ替える必要があります。最後に、リストを 2 次元配列に変換して戻すと、行のシャッフルが完了します。この方法はシンプルで実装が簡単で、2 次元配列の行を効果的にスクランブルでき、開発者にデータを処理するためのより柔軟な方法を提供します。
csvファイルを読み込んでデータの前処理を行うコードを書いたのですが、順序は変更されていませんが、列ではなく2次元配列の行をシャッフルするはずです。 。
私が抱えている問題は、2次元配列の行と列がスクランブルされることですが、それを修正する方法がわかりません。
リーリーご覧のとおり、他にもメソッドはありますが、正常に動作するのはこの shuffle2darray() メソッドだけです。
データをランダムに 10 部分に分割し、10 部分の相互検証を実行できるようにします
コードに print ステートメントを入れてみたり、シャッフルの前後で 2 次元配列をチェックしてみたり、CSV ファイルをチェックして行が正しい順序であることを確認してみたりしました。
これはフィルタリング前の小さな例です:
cpi_9606.ensp00000000233 | cpi_9606.ensp00000000412 | cpi_9606.ensp00000000442 | cpi_9606.ensp00000001008 | cpi_9606.ensp00000001146 | cpi_9606.ensp00000002165 | cpi_9606.ensp00000002829 | cpi_9606.ensp00000003084 | cpi_9606.ensp00000003100 |
---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 180 |
列のフィルタリングとシャッフル後:
cpi_9606.ENSP00000000442 | cpi_9606.ENSP00000001008 | cpi_9606.ENSP00000003084 | cpi_9606.ENSP00000003100 | cpi_9606.ENSP00000005178 | cpi_9606.ENSP00000011292 | cpi_9606.ENSP00000011653 | cpi_9606.ENSP00000012443 | cpi_9606.ENSP00000013034 | cpi_9606.ENSP00000014930 |
---|---|---|---|---|---|---|---|---|---|
0 | 900 | 0 | 0 | 0 | 900 | 0 | 0 | 0 | |
900 | 0 | 0 | 0 | 0 | 0 | 928 | 900 | 338 | |
322 | 236 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
コード スニペットには、並べ替える配列という重要な要素が含まれていません。
ということで、暗闇でのワイルドなショットは次のようになると思います:
リーリーシャッフルするにはライナーです。所有するコードはすべて破棄できます:
リーリーでは、なぜこれが機能するのでしょうか?
2 次元配列などというものは存在しないからです。 Javaにはそれらがまったくありません。
あなたが持っている int[][] allfeatures
は 2D 配列ではありません。これは、コンポーネントが int 配列型である 1 次元配列です。したがって、 arrays.aslist(allfeatures)
は、(プリミティブではなく) オブジェクトの配列があるため、優れています。各オブジェクトは int の配列です。式のタイプは list<int[]>
です。
arrays.aslist
基礎となる配列に基づいたリストを返します。したがって、.set()
は機能しますが、.add()
は機能しません (配列は要素を変更できますが、拡大または縮小できないため)。 collections.shuffle
は任意のリストをシャッフルでき、これを行うには .set
と .get
のみを使用します。 arrays.aslist
がサポートされています。とても良い。
これらすべての結果は、これにより allfeatures
自体が再スケールされることになります。
allfeatures
を変更しないでおきたい場合は、まずクローンを作成してください:
以上がJavaで2D配列の行をシャッフルするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。