我很难根据排序值将2D数组中的值分配到群集中。可能有点难以理解,但我会尽力解释。
我有一个2D矩阵,如下所示。
[5.2, 3.0, 4.4, 6.1]
[0.1, 1.0, 6.9, 4.5]
[3.1, 3.3, 5.9, 1.3]
现在,我想迭代每一行中的第一列,并为每个列单元格值分配簇(可以是数组/列表)。
因此,2D列中的最低值将分配给群集1,第二个最低值将分配给群集2,第三个最低值将分配给群集3.然后它将移至下一列并重做。< / p>
例如:
First column
5.2 (3rd lowest value -> assign to cluster 3)
0.1 (lowest value -> assign to cluster 1)
3.1 (2nd lowest value -> assign to cluster 2)
...然后进入第二列。问题是,列和行是动态的,因此我无法对集群阵列使用静态变量(集群的数量可能会发生变化)。
因此,当所有内容都聚集在一起时,每个群集的输出将包含以下内容:
double[] cluster1 = 0.1, 1.0, 4.4, 1.3; //contains the lowest value in each column
double[] cluster2 = 3.1, 3.0, 5.9, 4.5; //contains the 2nd lowest value in each column
double[] cluster3 = 5.2, 3.3, 6.9, 6.1 //contains the 3nd lowest value in each column
--- and if there's more row, number of cluster may increase...
这是我到目前为止尝试执行的代码,但这只能从每列获得最低值...
int dynamicCol = 4;
int dynamicRow = 3;
for(int col=0;col<dynamicCol;col++)
{
for(int row = 0; row < dynamicRow; row++)
{
colArray[row] = cluster[row][col];
}
System.out.println("Min in col "+(col+1)+": "+getMin(colArray));//this will find the lowest value in each column and store in an array
cluster1.add(getMin(colArray));//store the lowest value in each column into cluster 1
}
//getMin function to get lowest value in each column
public static double getMin(double[] inputArray){
double minValue = inputArray[0];
for(int i=1;i<inputArray.length;i++){
if(inputArray[i] < minValue){
minValue = inputArray[i];
}
}
return minValue;
}
对此表示感谢。感谢。
答案 0 :(得分:0)
我不建议按原样使用它,但可能有帮助
public static void main(String[] args){
int[][] data = new int[][]{ {1,4,3},
{2,1,4},
{3,2,1},
{4,3,2}};
int row = data.length;
int col = data[0].length;
System.err.println(row+" rows");
System.err.println(col + " columns");
List<List<Integer>> clusters = new ArrayList<>(row);
for(int i=0; i< row; i++){
clusters.add(new ArrayList<Integer>(col));
}
List<Integer> temp = new ArrayList<>(col);
for(int i=0; i< col; i++){
temp.clear();
for(int j=0; j< row; j++){
temp.add(data[j][i]);
}
System.err.println(temp);
Collections.sort(temp);
for(int x = 0; x < row; x++){
clusters.get(x).add(temp.get(x));
}
}
System.err.println("Results");
System.err.println(clusters);
}
答案 1 :(得分:0)
您可以使用Arrays.sort()
方法对数组的每一行进行排序,然后将每个列值放在同一位置的集群中。
int[][] my2DArray = new int[][]{
{1,4,3},
{2,1,4},
{3,2,1},
{4,3,2}};
// Initialize list of clusters.
List<List<Integer>> clusters = new ArrayList<List<Integer>>();
for (int i = 0; i < my2DArray.length; i++) {
clusters.add(new ArrayList<>());
}
for (int[] column : my2DArray) {
Arrays.sort(column);
for (int i = 0; i < column.length; i++) {
clusters.get(i).add(column[i]); // Add the value to the cluster
}
}