EXCEL VBA: 使用数组的点积

EXCEL VBA: Dot Product using Arrays

下面是示例代码,它是从一个更大的整体中摘录的。我正在尝试计算向量 betaXtempj 的点积,它应该是一个标量,然后将结果标量乘以另一个标量 Ycoded(j,1).

但是,我在 temp1(j,1) 的赋值语句中收到一条错误消息 "Type mismatch"。

选项显式

Sub XX()

    Dim beta As Variant
    Dim temp1 As Variant
    Dim X5 As Variant
    Dim Xtempj As Variant
    Dim Ycoded As Variant

    ReDim beta(1 To 2, 1 To 1)
    ReDim X5(1 To 2, 1 To 2)
    ReDim temp1(1 To 2, 1 To 1)
    ReDim Xtempj(1 To 2, 1 To 1)
    ReDim Ycoded(1 To 2, 1 To 1)

    beta(1, 1) = 0.510825624
    beta(2, 1) = 0

    X5(1, 1) = 1
    X5(1, 2) = 45
    X5(2, 1) = 1
    X5(2, 2) = 76

    Ycoded(1, 1) = 1
    Ycoded(2, 1) = 0

    For j = 1 To 2
        For k = 1 To 2
            Xtempj(k, 1) = X5(j, k)
        Next k

        temp1(j, 1) = WorksheetFunction.MMult(Application.Transpose(beta), Xtempj) * Ycoded(j, 1)

    Next j

End Sub

此错误消息让我认为 VBA 正在将 Ycoded(j,1) 视为 1 x 1 数组。因此,我也尝试了如下语句:

temp1(j, 1) = WorksheetFunction.MMult(WorksheetFunction.MMult(Application.Transpose(beta), Xtempj), Ycoded(j, 1))

然而,我在这里收到 "Unable to get the MMult property of the WorksheetFunction class"。

我可以在睡梦中用 R 或 SAS Proc IML 做这种事情,所以这非常令人沮丧。任何 assistance/insight 表示赞赏。

最佳,

对于显示的特定实例,它被视为返回的数组,因此期望您索引到该数组,例如

 temp1(j, 1) =  Ycoded(j, 1) * WorksheetFunction.MMult(Application.Transpose(beta), Xtempj)(1) 

MMULT 否则期望一个数组中的行与另一个数组中的列相等。

WorksheetFunction.MMult(Application.Transpose(beta), Xtempj) 正在生成一个变体(1 到 1)。您使用 (1) 对其进行索引以访问该值。