【发布时间】:2021-08-04 14:36:17
【问题描述】:
我有两个大小相等的数组。
double[] array1;
double[] array2; //array1 size == array2 size
我还有一个常数double constant = 5。比如说5
我想创建一个新数组double[] array3;,我们在其中获取array1 中的每个元素,并从array1 中减去array2 中相同索引处的元素。
所以:
array3[i] = array1[i] - array2[i]
然后我想在 array3 中的所有元素中减去常数。
我可以使用 for 循环来完成这一切,但是我的数组非常庞大,因此需要很长时间来计算。有没有办法在不使用 for 循环的情况下专门做减法?
示例数据:
如果:
array1 = {1, 2, 3, 4, 5, 6};
array2 = {0.1, 0.2, 0.3, 0.4, 0.5, 0.6};
然后
array3 = {0.9, 1.8, 2.7, 3.6, 4.5, 5.4}
现在减去constant
array3 = {-4.1, -3.2, -2.3, - 1.4, -0.5, 0.4}
【问题讨论】:
-
您可以使用
array1.Zip(array2, (x, y) => x - y),但这不一定比for循环更快... -
" 有没有办法在不使用 for 循环的情况下专门进行减法运算?" - 您需要在数组上循环的地方 - 至少一次。
-
如上所述,即使你没有明确使用
for循环,你最终也会循环遍历你的数组(可能在内部 i> 但仍然) -
如果
array1和array2的大小相同,则只能使用 1 个for循环。for(int i = 0; i < array1.Length; i++) { array3[i] = (array1[i] - array2[i]) - const); },我看不出有什么理由你不能在一次迭代中完成所有操作,减去数组值和每次迭代中的 const。 -
有一个Parallel.For Method;但是,只有当要执行的工作量很大时,它才会加快速度。还有SIMD-accelerated types in .NET。