Применение функции VBA к матрице / массиву данных - PullRequest
0 голосов
/ 19 апреля 2020

введите описание изображения здесь Моя матрица результатов от умножения - 3x1. Я хотел бы применить свою функцию, определенную в VBA, к результирующей матрице h и создать новую матрицу h1. Любое предложение по улучшению этого кода? Будет ли для каждого лучше в сценарии?

Спасибо Frens

Function sigmoid(X As Double) As Double
sigmoid = 1 / (1 + Exp(-X))
End Function

Sub arraymult()
    Dim i(0 To 2, 0 To 0) As Double
    Dim w(0 To 1, 0 To 2) As Double

i(0, 0) = 1
i(1, 0) = 2
i(2, 0) = 6

w(0, 0) = 2
w(0, 1) = 1
w(0, 2) = 1
w(1, 0) = 1
w(1, 1) = 1
w(1, 2) = 1

h = Application.WorksheetFunction.MMult(w, i)

        For j = 0 To 2
            h1(0, j) = sigmoid(h(0, j)) 'problem here
        Next j
End Sub

1 Ответ

0 голосов
/ 19 апреля 2020

Вам необходимо объявить ваши массивы как вариант, а затем использовать Cdbl, чтобы сделать его двойным при переходе к функции.

Function sigmoid(X As Double) As Double
    sigmoid = 1 / (1 + Exp(-X))
End Function

Sub arraymult()
    Dim i(0 To 2, 0 To 0) As Double
    Dim w(0 To 1, 0 To 2) As Double


    i(0, 0) = 1
    i(1, 0) = 2
    i(2, 0) = 6

    w(0, 0) = 2
    w(0, 1) = 1
    w(0, 2) = 1
    w(1, 0) = 1
    w(1, 1) = 1
    w(1, 2) = 1

    Dim h() As Variant
    h = Application.WorksheetFunction.MMult(w, i)

    Dim h1() As Variant
    ReDim h1(0 To 0, LBound(h, 1) To UBound(h, 1))

    For j = LBound(h, 1) To UBound(h, 1)
        h1(0, j) = sigmoid(CDbl(h(j, 1))) 'problem here
    Next j


End Sub

enter image description here

...