2D配列は配列の配列であることを知っています。行を取得するには、次を実行します。
rowArray = my2Darray[row]
各行は異なるサイズになる可能性があるため、2D配列から列を取得するために組み込まれていないと想定しています。次のようなことをしなければならないと信じるようになります。
for(int row = 0; row < numRows; row++)
{
colArray[row] = m2Darray[row][columnOfInterest];
}
これは正しいです?それが唯一の方法ですか?
2D配列を使用するようにロックダウンされている場合、はい、これは不便です。ただし、役立つ可能性のある提案(可能な場合):
列のフェッチを処理するクラスで配列をラップします。
幸運を。
Commons mathには、チェックアウトしたいツールがいくつかあります。
double[][] data = new double[10][10];
BigMatrix matrix = MatrixUtils.createBigMatrix(data);
matrix.getColumnAsDoubleArray(0);
あなたの道は行く道です。ただし、それを何度も行う必要がある場合は、列に格納することをお勧めします。 (またはその両方)
実際、Apache Commonsの最新バージョン(3.5)にはBigMatrixクラスがありません。これの代わりに、RealMatrixを使用できます。
double[][] data = new double[10][10];
RealMatrix rm = new Array2DRowRealMatrix(data);
rm.getColumn(i);
int[][] array = new int[rows][coloumn];
for (int i = 0 ; i < array.length ; i++) {
for (int j = 0 ; j < array[].length; j++) {
int col = array[j][i];
}
}
まあ実際に私はこれをコメントとして書きますが、私の評判はまだ低いので、答えなければなりません:
あなたが意味すると思います:
for(int row = 0; row < numRows; row++)
{
colArray[row] = m2Darray[row][columnOfInterest];
}
ところで:あなたは正しいと思います。簡単な方法はありません。
別の方法は、行を列として保存することです。例えば私はまったく同じことをする必要があり、当初は10行2列の配列を作成することを計画していました。この制限のため、行と列を交換し、10列と2行の配列を作成しました。次に、array [0]を使用して、新しい配列(元の配列の列)から行を取得できます。もちろん、この配列の作成者である場合にのみ、この柔軟性が得られます。
お役に立てば幸いです...
/**
input data
**/
int[][] r = {
{1, 2},
{3, 4}
};
//the colum index
int colIndex = 1;
Integer[] col = Arrays.stream(r).stream().map(arr -> arr[colIndex]).toArray(size -> new Integer[size]);
//col data
for (Integer integer : col) {
System.out.println(integer);
}
ここでは、1つの列データ全体を2Dマトリックスで印刷します。