有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中,如何在不使用for循环的情况下执行n个数组的元素级加法

正如标题所示,我想知道如何使用Java将n(其中n是一个大于2的任意数)数组求和在一起,以一种随着n的增加而扩展的方式

用一个例子来解释可能是最容易的。我使用以下代码生成了20个长度为5的数组

int n = 20;
int k = 5;

Random rand = new Random();
ArrayList<Integer[]> tuplesList = new ArrayList<>();

for (int i = 0; i < n; i++) {
    Integer[] tuple = new Integer[k];
    Arrays.setAll(tuple, index -> rand.nextInt(30));
    tuplesList.set(i, tuple);
}

现在我希望能有所改善。我目前将数组按元素添加到一起的方法是简单地循环遍历每个数组,并将它们的元素添加到一个累积和中

int[] cumSum = new int[k];

for (Integer[] tup : tuplesList) {
    Arrays.setAll(cumSum, ind -> cumSum[ind] + tup[ind]);
}

System.out.println(Arrays.toString(cumSum));

对于只有20个数组来说,这当然是微不足道的,但如果我们有1000000个数组,这可能会非常耗时。有更好的方法吗?我有一种矢量化的方法,可以使用Arrays.setAll函数按元素对两个数组求和,但这能被泛化为将n数组相加吗?请注意,不需要将数组列表存储为ArrayList<Integer[]>,这正是我第一次想到的

另外,如果有人想要一些示例数字,下面是我在浏览脚本时得到的:

[12, 20, 12, 22, 14]
[1, 10, 23, 9, 27]
[3, 2, 17, 24, 11]
[6, 11, 22, 5, 15]
[7, 26, 28, 27, 8]
[10, 23, 2, 15, 7]
[13, 5, 19, 3, 9]
[21, 23, 17, 16, 24]
[4, 20, 6, 14, 14]
[19, 4, 16, 24, 4]
[27, 14, 28, 0, 17]
[27, 20, 3, 8, 29]
[2, 21, 0, 24, 26]
[3, 2, 1, 23, 23]
[11, 11, 15, 26, 17]
[10, 26, 10, 8, 3]
[3, 27, 11, 13, 28]
[1, 29, 26, 3, 14]
[20, 1, 10, 29, 8]
[11, 25, 29, 28, 5]

Output:
[211, 320, 295, 321, 303]

共 (0) 个答案