gpt4 book ai didi

java - 自动添加数组的行

转载 作者:行者123 更新时间:2023-12-01 13:36:26 25 4
gpt4 key购买 nike

我有一个 vector [1.0, 1.0, 1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0] 以及相应的 19xn 矩阵。我想根据 vector 的索引在矩阵的行中执行加法运算。所以我想添加对应索引一、二、三的行,最后构造一个包含 3 行的新数组。在不知道先前索引号的情况下(但知道它们按照我的示例中的方式排序),如何自动执行此操作?

最佳答案

有多种选择。取决于性能或内存消耗哪个更重要,取决于实际用例中 vector/矩阵的大小以及索引的实际分布情况。但一个相当简单(恕我直言,优雅)且通用的解决方案可能是创建一个映射,将每个索引映射到迄今为止已计算的矩阵行的总和。可能有一些解决方案稍微更高效或需要更少的内存,但它们可能不那么可读。

import java.util.Arrays;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;

public class AddMatrixRows
{
public static void main(String[] args)
{
double vector[] = {
1.0, 1.0, 1.0, 1.0, 1.0,
2.0, 2.0, 2.0, 2.0, 2.0,
2.0, 2.0, 2.0, 3.0, 3.0,
3.0, 3.0, 3.0, 3.0};
double matrix[][] = new double[vector.length][];
for (int r=0; r<vector.length; r++)
{
matrix[r] = new double[] { 12, 34, 56 };
}

double sums[][] = computeSums(vector, matrix);
for (int r=0; r<sums.length; r++)
{
System.out.println(Arrays.toString(sums[r]));
}
}

private static double[][] computeSums(double vector[], double matrix[][])
{
Map<Integer, double[]> sumsByIndex = new LinkedHashMap<Integer, double[]>();
for (int r=0; r<vector.length; r++)
{
int index = (int)vector[r];
double array[] = sumsByIndex.get(index);
if (array == null)
{
int numColumns = matrix[index].length;
array = new double[numColumns];
sumsByIndex.put(index, array);
}
add(array, matrix[index]);
}
return toArray(sumsByIndex.values());
}

private static double[][] toArray(Collection<double[]> collection)
{
double result[][] = new double[collection.size()][];
int i = 0;
for (double sum[] : collection)
{
result[i] = sum;
i++;
}
return result;
}

private static void add(double array[], double addend[])
{
for (int i=0; i<array.length; i++)
{
array[i] += addend[i];
}
}
}

关于java - 自动添加数组的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21231334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com