V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Sequencer
V2EX  ›  Python

如何在 numpy 里面自定义 array 元素的数据类型

  •  
  •   Sequencer · 2015-09-28 14:13:26 +08:00 · 3314 次点击
    这是一个创建于 3346 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我需要把一堆点阵放入一个 array 里面,然后点阵信息有坐标(User.SomeClass)和强度(np.complex),就是坐标的结构我是用 class 定义在 User 文件里面的,然而还是会给我返回
    TypeError: data type not understood
    难道是 python 用另外的东西来定义数据结构?
    18 条回复    2015-09-29 23:19:17 +08:00
    luoluoluo
        1
    luoluoluo  
       2015-09-28 14:21:54 +08:00
    代码贴出来,或者 go SO. http://stackoverflow.com/questions/ask
    facat
        2
    facat  
       2015-09-28 15:12:44 +08:00 via Android
    array 不能用任意类型做数组元素
    Sequencer
        3
    Sequencer  
    OP
       2015-09-28 16:06:27 +08:00
    @facat 谢了,那有啥替代方案了?
    @luoluoluo 就是因为这个原因代码写的卡在一半的地方,大致就是我上面描述的意思
    deanguqiang
        4
    deanguqiang  
       2015-09-28 16:09:10 +08:00
    用二维 array 代替?
    zhuangzhuang1988
        5
    zhuangzhuang1988  
       2015-09-28 16:11:54 +08:00
    Sequencer
        6
    Sequencer  
    OP
       2015-09-28 16:23:19 +08:00
    @zhuangzhuang1988 嗯嗯,理解了。谢谢
    @deanguqiang 谢谢,已经用序列化的方式解决了!
    BooksE
        7
    BooksE  
       2015-09-28 16:41:02 +08:00
    任意元素的话,matlab 里面 cell 可以满足你.
    Sequencer
        8
    Sequencer  
    OP
       2015-09-28 16:55:23 +08:00 via iPhone
    @BooksE 正是因为 matlab 效率太低了才转 py 的😂
    facat
        9
    facat  
       2015-09-28 21:46:58 +08:00
    @Sequencer 为什么要在 array 中加入自己定义的元素,你需要进行哪些矩阵操作?还有, matlab 计算效率比 python 高很多,你认为 matlab 效率在哪方面效率低?
    sivacohan
        10
    sivacohan  
       2015-09-28 21:48:49 +08:00 via Android
    pytable
    h5py
    benatsh
        11
    benatsh  
       2015-09-28 21:59:27 +08:00
    可以利用 Dtypes 解决你的问题
    BooksE
        12
    BooksE  
       2015-09-29 08:48:44 +08:00
    @Sequencer 嗯...那倒是
    @facat Matlab 读大文件效率低,然后循环是一生的痛.
    Sequencer
        13
    Sequencer  
    OP
       2015-09-29 11:07:14 +08:00
    @facat 光线追踪算法 二叉树 每道光 30s 上千束光加上镜子多了就可以边睡觉边听风扇吹了
    facat
        14
    facat  
       2015-09-29 16:57:11 +08:00 via Android
    @Sequencer 实际上就算 numpy 的 array 支持你的自定义数据类型,进行矩阵运算前你还得为你定义的类型重载运算符,太不方便。
    facat
        15
    facat  
       2015-09-29 16:58:54 +08:00 via Android
    @BooksE matlab 新版本对循环做了优化,不会慢。最重要的是, matlab 得优势在于向量计算。你把循环优化成向量计算的形式就回发现计算效率很高。
    Sequencer
        16
    Sequencer  
    OP
       2015-09-29 17:05:48 +08:00
    @facat 现在程序的瓶颈在于追光的效率问题,每经过一个 lens 就要计算投射反射,计算之后就是两束光,然后对两束光分别追,这样的就只有一个二叉树下来,所以程序就很慢了。
    因为做科研,不是学专业计算机的,所以算法之类的都是自己想的,也不知道怎么优化
    BooksE
        17
    BooksE  
       2015-09-29 22:34:08 +08:00
    @facat 哪个版本对循环做了优化?我用的 2014b 循环性能还是很差.而且有些操作根本就向量化不了啊.
    facat
        18
    facat  
       2015-09-29 23:19:17 +08:00
    @BooksE 我用 2014a 就觉得循环已经很快了。可能你的问题与循环无关。其实 python 的科学计算效率并不高,调试不如 matlab 方便,除非工程应用不建议用于数值计算。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1031 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:43 · PVG 04:43 · LAX 12:43 · JFK 15:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.