numpy学习之(一)

1、numpy.vectorize()

         class numpy.vectorize(pyfunc, otypes=None, doc=None, excluded=None, cache=False, signature=None)

定义了一个矢量函数,输入是嵌套化的对象序列或者是numpy数组,

         输出是单个或元组的numpy数组。跟 Python中的map()函数很类似。将函数pyfunc作用在序列化的对象上。

numpy.vectorize()只是为了方便,效率比较低。

        官方例子:

import numpy as np 
def myfunc(a, b):
    'Return a-b if a>b, otherwise return a+b'
    if a>b:
        return a-b
    else:
        return a+b

vfunc = np.vectorize(myfunc)

print(vfunc([1, 2, 3, 4], 2))
#[3 4 1 2]

        相当于 2 与列表中的1,2,3,4 依次 调用函数。即1,2; 2,2; 3,2; 4,2做vfunc计算。

2、np.digitize()函数

       umpy.digitize(x, bins, right = False)

       参数:

       x : numpy数组

       bins :一维单调数组,必须是升序或者降序

      right:间隔是否包含最右

      返回值:x在bins中的位置。

      用法示例:

import numpy as np
bins = np.array(range(-99, 102, 3))
a = np.digitize(-98,bins) #a=1
b = np.digitize(68,bins)  #b=56
print(a) 
print(b)

        bins值为-99到102(取不到102)的值( [-99, -96, -93, ... , 93, 96, 99] )。

        取值在[-∞ ,-96)区间内返回值为1,

       在[96,-93)区间内返回值为2,

       ...

      在[96,+∞ )区间返回值为66。

      所以a的值为1,b的值为56。

3、对numpy中array和asarray的区别详解

      array和asarray都可以将结构数据转化为ndarray,但是主要区别就是当数据源是ndarray时,array仍然会copy出一个副本,占用新的内存,但asarray不会。

4、numpy.intersect1d

       numpy.intersect1d(ar1, ar2, assume_unique=False)

       求两个数组的交集.

       返回非重复的有序数组,数组成员同时在ar1, ar2中

       参数:

        ar1, ar2 : array_like

        assume_unique : bool值

        assume_unique 如果为真,输入的数组ar1和ar2的元素不重复 ,这样可以加速计算,assume_unique默认为假。

        比如:

        np.intersect1d([1, 3, 4, 3], [3, 1, 2, 1])

        array([1, 3])

        在多于两个序列时经常要结合reduce()函数一起使用(To intersect more than two arrays, use functools.reduce):
     

np.intersect1d([1, 3, 4, 3], [3, 1, 2, 1])
#array([1, 3])

       在多于两个序列时经常要结合reduce()函数一起使用(To intersect more than two arrays, use functools.reduce):

from functools import reduce
reduce(np.intersect1d, ([1, 3, 4, 3], [3, 1, 2, 1], [6, 3, 4, 2]))
#array([3])

5、reduce()函数

        python中的reduce内建函数是一个二元操作函数,他用来将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 func()(必须是一个二元操作函数)先对集合中的第1,2个数据进行操作,得到的结果再与第三个数据用func()函数运算,最后得到一个结果。

        如:

def myadd(x,y):  
    return x+y  
sum=reduce(myadd,(1,2,3,4,5,6,7))  
print(sum)

         #结果就是输出1+2+3+4+5+6+7的结果即28

         当然,也可以用lambda的方法,更为简单:

sum=reduce(lambda x,y:x+y,(1,2,3,4,5,6,7))  
print sum 

         在python 3.0.0.0以后, reduce已经不在built-in function里了, 要用它就得from functools import reduce.

6、numpy: np.logical_and/or/not (逻辑与/或/非)

np.logical_and (逻辑与)

np.logical_and(x1, x2, *args, **kwargs)

Test

>>> np.logical_and(True, False)
False
>>> np.logical_and([True, False], [False, False])
array([False, False], dtype=bool)

>>> x = np.arange(5)
>>> np.logical_and(x>1, x<4)
array([False, False,  True,  True, False], dtype=bool)

np.logical_or (逻辑或)

np.logical_or(x1, x2, *args, **kwargs)

Test

>>> np.logical_or(True, False)
True
>>> np.logical_or([True, False], [False, False])
array([ True, False], dtype=bool)

>>> x = np.arange(5)
>>> np.logical_or(x < 1, x > 3)
array([ True, False, False, False,  True], dtype=bool)

np.logical_not (逻辑非)

logical_not(x, *args, **kwargs)

Test

>>> np.logical_not(3)
False
>>> np.logical_not([True, False, 0, 1])
array([False,  True,  True, False], dtype=bool)

>>> x = np.arange(5)
>>> np.logical_not(x<3)
array([False, False, False,  True,  True], dtype=bool)

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值