明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1551|回复: 7

[【PyCAD】] Pycad 利用pythonnet引用Cpython库numpy

  [复制链接]
发表于 2023-3-4 21:59:59 | 显示全部楼层 |阅读模式
本帖最后由 枫叶棋语 于 2023-3-7 00:59 编辑

需要加载导入pythonnet包,关键在于将Ironpython对象转换成Cpython对象,转换后,就如在Cpython中使用一样。
需要安装Python 3.8,并添加路径

import sys
sys.path.append(r'D:\Pycad\src\packages\pythonnet.3.0.1\lib\netstandard2.0')
sys.path.append(r'D:\Pycad\src\packages\Python.Included.3.11.1\lib\netstandard2.0')
sys.path.append(r'D:\Pycad\src\packages\Python.Deployment.2.0.0\lib\netstandard2.0')
sys.path.append(r'D:\Program Files\Python38')

import clr
clr.AddReference('Python.Runtime.dll')
clr.AddReference('Python.Deployment.dll')
clr.AddReference('Python.Included.dll')

from Python.Runtime import *
from Python.Deployment import *
from Python.Included import *
if not PythonEngine.IsInitialized:
    PythonEngine.Initialize()

def CpythonConvertToIron(object):
    return eval(object.ToString())

def IronConverToCpython(object):
    return PythonEngine.Eval(str(object))
with Py.GIL():
    np = Py.Import("numpy")
    list1= [[1,2,3],[4,5,6]]
    list2=IronConverToCpython(list1)
    arr=np.asarray(list2)

最终结果

>>>arr
[[1 2 3]
[4 5 6]]







评分

参与人数 1明经币 +1 收起 理由
陨落 + 1 很给力!

查看全部评分

 楼主| 发表于 2023-3-4 22:06:06 | 显示全部楼层
本帖最后由 枫叶棋语 于 2023-3-4 22:07 编辑

np数组转为list用以下方法:
list1= arr.tolist()
list2=CpythonConvertToIron(list1)


>>>list1= arr.tolist()
>>>list2=CpythonConvertToIron(list1)
>>>list2
[[1, 2, 3], [4, 5, 6]]
>>>

发表于 2023-3-6 17:58:36 | 显示全部楼层
我只想问下这位大神怎么研究出来的。如何才能达到这样的高度?
同样的代码我用到犀牛grasshopper里面也成功了
 楼主| 发表于 2023-3-7 00:57:17 | 显示全部楼层
陨落 发表于 2023-3-6 17:58
我只想问下这位大神怎么研究出来的。如何才能达到这样的高度?
同样的代码我用到犀牛grasshopper里面也成 ...

数据转换还是有限制,要是能通用就更好了
发表于 2023-3-15 07:44:14 | 显示全部楼层
优秀,回帖是一种美德
发表于 2023-3-25 19:27:47 | 显示全部楼层
大佬 这两个路径是要安装什么库才有啊sys.path.append(r'D:\Pycad\src\packages\Python.Included.3.11.1\lib\netstandard2.0')
sys.path.append(r'D:\Pycad\src\packages\Python.Deployment.2.0.0\lib\netstandard2.0')
 楼主| 发表于 2023-4-5 12:01:17 | 显示全部楼层
ymin 发表于 2023-3-25 19:27
大佬 这两个路径是要安装什么库才有啊sys.path.append(r'D:\Pycad\src\packages\Python.Included.3.11.1\li ...

import sys
import clr
sys.path.append(r'D:\Program Files\Python38')
sys.path.append(r'D:\Program Files\Python38\Lib\site-packages')
sys.path.append(r'D:\Program Files\Python38\Lib\site-packages\pythonnet\runtime')
clr.AddReference('Python.Runtime')
from Python.Runtime import *
import os
os.environ["PYTHONHOME"] = r'D:\Program Files\Python38'
os.environ["PYTHONNET_PYDLL"]=r'D:\Program Files\Python38\python38.dll'
os.environ['PYTHONPATH'] = r'D:\Program Files\Python38\Lib' + ';' +r'D:\Program Files\Python38\Lib\site-packages'
 楼主| 发表于 2023-4-5 12:03:41 | 显示全部楼层
pyb =Py.Import('builtins')
py_float=pyb.float
py_int=pyb.int
py_str=pyb.str
py_tuple=pyb.tuple
py_list=pyb.list
py_set=pyb.set
py_dict=pyb.dict
这样可以直接使用Cpython里面的基本函数,dir(pyb),可以看到更多内容
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 04:27 , Processed in 0.160356 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表