Как передать массив numpy из Python в функцию Golang - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь создать библиотеку с помощью Golang для работы в Python.Но у меня есть одна проблема: я не могу передать numy массив функции go.Пожалуйста, помогите мне решить проблему.

Мой код:

main.go:

package main

import "C"
import "fmt"

type Matrix [][] int

//export Mass
func Mass(data Matrix) int {
  var sum int=0
  for i, x:= range data {
    for j, _ := range x {
        sum+=data[i][j]
    }
  }
  return sum
}

func main() {
}

ex.py:

from ctypes import *
import numpy as np

mysum = cdll.LoadLibrary(r'D:\tests\go\sum.dll')

array_2d_int = np.ctypeslib.ndpointer(dtype=c_int32, ndim=2,
                                      flags='CONTIGUOUS')

def mass(a):
    mysum.Mass.argtypes = [array_2d_int]
    mysum.Mass.restype = c_int32
    return mysum.Mass(a)

Компиляция cmd-строки:

go build -buildmode=c-shared -o sum.dll main.go

Когда я вызываю функцию из библиотеки dll:

from ex import mass
import numpy as np

a=np.array([[1,2],[3,4]])

print(mass(a))

У меня естьошибки:

unexpected fault address 0x1b216000
fatal error: fault
[signal 0xc0000005 code=0x0 addr=0x1b216000 pc=0x6ac92c1f]

goroutine 17 [running, locked to thread]:
....
...