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

Python 这段语法看不懂了, slice?

  •  
  •   lin250 · 2017-06-15 17:35:30 +08:00 · 2845 次点击
    这是一个创建于 2710 天前的主题,其中的信息可能已经有所发展或是发生改变。

    iris = datasets.load_iris()

    X = iris.data

    y = iris.target

    X = X[y != 0, :2]

    y = y[y != 0]

    第四行 X = X[y != 0, :2]是什么意思?

    len(X)#150

    X[y != 0]#150

    X[y != 0, :2]#150

    请教各位

    官方文档里只有 s[i:j]和 s[i:j:k]两种操作

    10 条回复    2017-06-16 14:15:50 +08:00
    cizixs
        1
    cizixs  
       2017-06-15 17:42:25 +08:00
    bool 值可以作为 0,1 使用
    kaka826
        2
    kaka826  
       2017-06-15 17:43:36 +08:00
    y != 0 这个表达式的值为 True or False,
    显然在 slice 中,True 是 1, False 是 0
    flaneurse
        3
    flaneurse  
       2017-06-15 17:53:18 +08:00 via Android
    顿悟,谢谢楼上
    fedel
        4
    fedel  
       2017-06-15 17:54:31 +08:00
    你有运行过 X = X[y != 0, :2] 吗???
    XYxe
        5
    XYxe  
       2017-06-15 17:57:11 +08:00
    hareandlion
        6
    hareandlion  
       2017-06-15 18:00:28 +08:00 via iPhone
    numpy 数组的行列可以单独切片
    fedel
        7
    fedel  
       2017-06-15 18:17:34 +08:00
    @fedel 原来是第三方库的用法,我试过了 python2.7 3.4 没有这种语法。
    glasslion
        8
    glasslion  
       2017-06-15 18:40:19 +08:00
    @flaneurse 你楼上的解释是错误的

    y == [0,0,0,1,1,1,2,2,2]
    y !=0 == [False, False, False, True, True,True, True,True,True,]
    y[y != 0] == [1,1,1,2,2,2]
    glasslion
        9
    glasslion  
       2017-06-15 18:50:57 +08:00   ❤️ 2
    @fedel 这当然是 python 2.7 3.4 的语法, 重载了 __getitem__ 而已

    class C(object):
    ...: def __getitem__(self, val):
    ...: print val

    >>> c= C()
    >>> c[1,2:3]
    (1, slice(2, 3, None))
    fedel
        10
    fedel  
       2017-06-16 14:15:50 +08:00
    @glasslion 感谢纠正,涨知识了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2829 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 06:53 · PVG 14:53 · LAX 22:53 · JFK 01:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.