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
imn1
V2EX  ›  Python

有没有比 pandas, numpy 轻量的二维数组模块

  •  
  •   imn1 · 2020-09-28 16:13:15 +08:00 · 2406 次点击
    这是一个创建于 1520 天前的主题,其中的信息可能已经有所发展或是发生改变。
    常用二维数组,有时按行读,有时按列读
    类似 pandas.DataFrame.loc/iloc/at

    单元不多,几十到几百,计算也不多,有时只是读取 /更改而已
    如果用内置列表,切换行列方式读取,往往要 zip 一遍,或者另外保存一份旋转(行列交换)的数组
    pandas/numpy 感觉太重,没有什么计算的话,不想转到他们的格式,然后又转出来,直接用 dataframe 传参也是太重

    想找个轻量一点的模块记录二维数组,方便自由按行或按列读取
    namedtuple 格式本来也不错,问题它是 tuple,改变一个单元的值就要一次转换,也不适用 sort

    没有的话,打算自己写个类算了
    17 条回复    2020-09-29 18:29:01 +08:00
    TimePPT
        1
    TimePPT  
       2020-09-28 17:40:04 +08:00   ❤️ 1
    如果考量计算效率的话,numpy 在 python 里是王者了
    wuwukai007
        2
    wuwukai007  
       2020-09-28 18:54:02 +08:00 via Android   ❤️ 1
    是要打包吗,考虑大小
    imn1
        3
    imn1  
    OP
       2020-09-28 19:11:16 +08:00
    @wuwukai007 #2
    首先,暂不考虑不打包
    其次,如果计算部分不多的,这个模块也不会太巨型吧?
    shm7
        4
    shm7  
       2020-09-28 19:17:53 +08:00   ❤️ 1
    @TimePPT 可能 lz 没法理解 numpy 为什么高效的原因。
    wuwukai007
        5
    wuwukai007  
       2020-09-28 19:20:30 +08:00 via Android   ❤️ 1
    不打包就装一个吗,难道公司内网没有 pip 源不好装?
    imn1
        6
    imn1  
    OP
       2020-09-28 19:54:20 +08:00
    @wuwukai007 #4
    那我没理解对你说的话
    我以为你说项目最后要打包给别人用

    @shm7
    @TimePPT
    Numpy 我知道,常用来计算证券,和商业数据分析
    只是有些场合,计算很少的,提取数据的情况多
    举个例子
    有个二维数组,要提取某一列 1/3/5/7 的数据,如果 pandas/numpy 很简单;如果只是 list,要么写个表达式,要么 zip 一次,取出这列再提取
    这个二维数组到其他地方提取方式可能不同,所以要原样传递
    这些场合后续计算很少,部分只是提取完就 print 了,没有计算,所以不想每个 py 都 import 一把牛刀,或者把 dataframe 作为参数传递,希望中间过程轻量一点,只是处理杀鸡这点小事而已

    这只是个例子,还有很多类似场景
    我问问有没有我不知道的模块可以做这事,没有的话,我自己弄个类,搞几个闭包写成方法,就不用各个场景都多写一两句 zip/for 这样的重复劳动了
    shm7
        7
    shm7  
       2020-09-28 19:59:30 +08:00 via iPhone   ❤️ 1
    @imn1 我还是用的太少了,只有 3 年,不太明白 numpy 被称为重的地方在哪。也不理解 2 维数组取 1357 有啥麻烦。
    iConnect
        8
    iConnect  
       2020-09-28 20:09:34 +08:00 via Android   ❤️ 2
    少了 numpy,py 也到不了今天的地位。不要嫌弃 numpy,这是顶梁柱
    imn1
        9
    imn1  
    OP
       2020-09-28 20:40:30 +08:00
    @shm7 #7
    不难,也不麻烦,能写
    例如
    a=pandas.DataFrame([[1,1],[1,3],[1,5],[1,7],[1,9]])
    a.iloc[[1,3],1]=[2,4]

    pandas 这句赋值盲写就行,二维 list 就要稍微转一下脑子
    我只是希望无脑套用 [1,3],1,懒得想表达式怎么写,如果场景多就每个表达式都要多想一点点,写成闭包以后就可以盲写了

    @iConnect #8
    不嫌弃,离开 numpy 我恐怕生计都成问题
    只是有些场合,象上面这句 a.iloc,可能整个 py 数百行,只有这两行用到 pandas,为了这个赋值不值得,我宁愿多写一两行省下这个 import 的时间和内存
    还是那句,如果有轻便的我试试,没有我就另想办法
    TimePPT
        10
    TimePPT  
       2020-09-28 21:21:07 +08:00 via Android   ❤️ 1
    @imn1 了解你的出发点了,确实如果仅仅是有限操作的话用 numpy 有点儿大炮轰蚊子了。
    minami
        11
    minami  
       2020-09-28 21:32:38 +08:00   ❤️ 1
    搜了一下,这个仓库可能满足你的需求,纯 python 实现的 ndarray:wadetb/tinynumpy
    crclz
        12
    crclz  
       2020-09-28 21:43:30 +08:00   ❤️ 2
    洁癖
    Huelse
        13
    Huelse  
       2020-09-28 23:28:22 +08:00   ❤️ 1
    或者自己用 C 写然后打包成动态库,完全自定义,当然要小心内存问题
    neoblackcap
        14
    neoblackcap  
       2020-09-28 23:42:58 +08:00   ❤️ 1
    numpy 在实际会用到 blas 的相关实现。很多时候哪怕你认为是读取的操作,实际上可能是当矩阵变换的操作。会有对应的加速的。一般人写不出那样高效的代码。如果你觉得效率没啥所谓,其实自己用 C 写一个也可以。关键还是看你实际的需求
    krixaar
        15
    krixaar  
       2020-09-29 08:40:08 +08:00   ❤️ 1
    @imn1 #6 > 有个二维数组,要提取某一列 1/3/5/7 的数据
    换个思路,“有张数据库表,要提取某一字段 1/3/5/7 行的数据”

    > 不想每个 py 都 import 一把牛刀,或者把 dataframe 作为参数传递,希望中间过程轻量一点
    参数只传一个表名够轻量吗

    > 想找个轻量一点的模块
    标准库 import sqlite3,都不用安装了🤣

    Let's CRUD🤣
    imn1
        16
    imn1  
    OP
       2020-09-29 14:41:13 +08:00
    @krixaar #15
    内存表?
    打开新思路,谢谢
    IgniteWhite
        17
    IgniteWhite  
       2020-09-29 18:29:01 +08:00 via iPhone
    pandas 基于 numpy

    numpy 的 array 都是数字,而且在内存里连续占用。这两点要比 python 自己的 list 轻量多了。你试试看 size,比一比就知道了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2402 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 16:10 · PVG 00:10 · LAX 08:10 · JFK 11:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.