首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CULA -在CULA中使用Python solve()

CULA -在CULA中使用Python solve()
EN

Stack Overflow用户
提问于 2015-03-12 10:26:52
回答 1查看 119关注 0票数 0

如何将Python的solve()合并到Python CULA程序中?我正在使用

代码语言:javascript
复制
LA = libculaC.solve() 

结果:

代码语言:javascript
复制
Traceback (most recent call last):
      File "culaTest.py", line 96, in <module>
        LA = libculaC.solve(0)
      File "/usr/lib/python2.7/ctypes/__init__.py", line 378, in __getattr__
        func = self.__getitem__(name)
      File "/usr/lib/python2.7/ctypes/__init__.py", line 383, in __getitem__
        func = self._FuncPtr((name_or_ordinal, self))
    AttributeError: /usr/local/cula/lib64/libcula_lapack.so: undefined symbol:     
    solve

任何liculaC和ctype的组合都会给出类似的错误。我怎样才能引入这个函数呢?我是否需要使用C函数(scanf)或其他什么。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-03-27 07:37:11

这花了一段时间,但这就是我到目前为止所得到的。必须使用ctype,并且必须转换为标准行主要行的列主要行。使用矩阵而不是数组,并始终保持数据类型的一致性。

代码语言:javascript
复制
import ctypes
from scipy import *
from scipy.linalg import *
import numpy as np
import sys
import csv
print     "___________________________________________________________________________________________________"

libculaC=ctypes.CDLL('libcula_lapack.so',mode=ctypes.RTLD_GLOBAL)
libculaC.culaGetStatusString.restype=ctypes.c_char_p

info=libculaC.culaInitialize()

#Row major-normal form, but must be converted-('4 1;2 5')
Anp = np.matrix('4.0 2.0;1.0 5.0') #Column major
print "This is Anp: "
print Anp
print '___________END Anp______________'

#use ctypes to convert from Py to C
#2x2 matrix
Anp = Anp.astype(numpy.float32)  #astype is array type for ctype
c_float_p = ctypes.POINTER(ctypes.c_float)
A1_p = Anp.ctypes.data_as(c_float_p)
# 2x1 matrix
B1 = np.matrix('5.0 ;7.0')
print "This is B1"
print B1
print '__________________B1 END______________________'
B1 = B1.astype(numpy.float32)
B1_p = B1.ctypes.data_as(c_float_p)

X=np.empty([2])
X=X.astype(numpy.float32)
X_p =X.ctypes.data_as(c_float_p)
print "This is X"
print X
print '__________________X END______________________'


info = 0
libculaC.culaSgesv(2,1,A1_p,2,X_p,B1_p,2)  #libculaC.culaSgesv

a = np.fromiter(B1_p, dtype=np.float32, count=2)
a = np.reshape(a,(-1,2))
print "The solution returning from Sgesv: "
print a
print "-----------------------Program End----------------------------"

libculaC.culaShutdown()

输出:这是Anp:

[4.2]

___________END Anp______________

这是B1

[ 5.]

__________________B1 END______________________

这是X

5. 7.

__________________X END______________________

从Sgesv返回的解决方案:

[ 1. 1.]

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29000886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档