python中a.any()以及&&,||

OO~ posted @ 2013年5月26日 20:26 in python , 11235 阅读

  首先说明一下,在python中是没有&&及||这两个运算符的,取而代之的是英文and和or。其他运算符没有变动。

  接着重点要说明的是python中的a.any(),我之所以会涉及到这个函数,是因为我在设计某个分段数值函数时由于不细心犯的错误引起的。a.any(),根据官方解释:

  Test whether any elements of an array evaluate to True along an axis.

即针对的是一个list,判断list中的某个元素是否为真,此时只要有一个元素为真,list元素全部输出。下面一个例子更直观的做了解释:

#!/usr/bin/python
#coding=utf8

import numpy as np

def f(data):
    for val in data:
        if val <= 0.6:
            r1 = val*1
            print "this is <= 0.6 numbers", r1
        if val > 4:
            r1 = val*1
            print "this is > 4 numbers ", r1

def main():
    data = np.arange(0.1, 5.1, 0.5)
    if np.any(data > 0.3) and np.any(data <= 1):
        r1 = data * 1
    print r1
    f(data)

if __name__=='__main__':
    main()

  对应的输出是:

[ 0.1  0.6  1.1  1.6  2.1  2.6  3.1  3.6  4.1  4.6]
this is <= 0.6 numbers 0.1
this is <= 0.6 numbers 0.6
this is > 4 numbers  4.1
this is > 4 numbers  4.6

  在a.any()中,只要满足条件,整个list就是true的。而我在分段函数计算时,恰恰使用到了a.any()来判断list的范围,在后面的计算中,其实是整个list同时运算然后赋值了,也就将分段函数结果简化成了某一段的所有值。正确的计算分段函数有两中策略,要么像上面的函数f(),要么将list分段带入运算。

  这个问题我纠结了一个晚上,最后才发现是a.any()的问题。最开始使用的时候,其真正的用法没有具体熟悉,同时我也该反省我自己,对python语言掌握的实在太菜了!

  路漫漫其修远兮,吾将上下而求索~

Avatar_small
OO~ 说:
2013年5月26日 20:32

跪求推荐牛人博客,学习python,敦促自己,得到提高

Avatar_small
依云 说:
2013年5月27日 00:18

这个不应该属于 numpy 的使用么?

Avatar_small
OO~ 说:
2013年5月27日 18:10

是啊,range貌似不太支持小数吧!PS:这个问题就是我在用matplotlib绘图时,遇到的!


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter