【发布时间】:2014-05-27 21:50:15
【问题描述】:
我正在尝试尽快将数组相乘。会有非常大的数组,成倍增加很多倍。我有下面使用嵌套循环的代码,有没有更快的方法呢?我有数组 a() 和 b(),我想让 sum(1) = a(1)*b(1) + a(1)*b(2) + a(1)*b(3)等等。
目前我在 Excel VBA 中,但我将很快转换为 VBA.NET。这应该比在 excel vba 中运行它快多少? .Net 中是否有更快的方法可供我使用?
Sub Test()
' Just creating the arrays
Dim a() as Integer, b() as Integer, sum() as Integer, i as Integer, j as Integer
ReDim a(1 to 3)
ReDim b(1 to 3)
ReDim sum(1 to 3)
For i = 1 to 3
a(i) = 2 * i
b(i) = 3 * i
Next i
' This is my code I am interested in
For i = 1 to 3
For j = 1 to 3
sum(i) = sum(i) + a(i) * b(j)
Next j
Next i
【问题讨论】:
-
“非常大”意味着什么(或至少近似),而“乘以很多倍”意味着什么?如果您担心性能,更准确地说明您将使用的数字规模会有所帮助。
-
你
sum似乎将外部产品的行加起来,而不是标准形式的矩阵乘法。标准矩阵乘法需要三个循环,每个元素求和s(i,j) = SUM(a(i,k)*b(k,j),k=1..n) -
sum(i)在哪里初始化?您正在使用未初始化的变量。 -
顺便说一句,根据我的经验,
.NET是VBA的 10 倍。