EXCEL VBA: 使用数组的点积
EXCEL VBA: Dot Product using Arrays
下面是示例代码,它是从一个更大的整体中摘录的。我正在尝试计算向量 beta
和 Xtempj
的点积,它应该是一个标量,然后将结果标量乘以另一个标量 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) 对其进行索引以访问该值。
下面是示例代码,它是从一个更大的整体中摘录的。我正在尝试计算向量 beta
和 Xtempj
的点积,它应该是一个标量,然后将结果标量乘以另一个标量 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) 对其进行索引以访问该值。