numpy 常用api(一)
来源:互联网 发布:服务器地址和端口号 编辑:程序博客网 时间:2024/06/10 09:40
numpy 常用api(二)
numpy 常用api(三)
clip
两个版本:
np.clip
作为成员函数,
x.clip
将一序列(sequence)中所有小于零的元素置零:
>>> x = np.arange(-5, 5)>>> xarray([-5, -4, -3, -2, -1, 0, 1, 2, 3, 4])
法1,布尔索引
>>> x<0array([ True, True, True, True, True, False, False, False, False, False], dtype=bool)>>> x[x<0] = 0>>> xarray([0, 0, 0, 0, 0, 0, 1, 2, 3, 4])
法2:np.where(三目运算),不对原始序列进行修改
>>> x = np.where(x<0, 0, x)array([0, 0, 0, 0, 0, 0, 1, 2, 3, 4])
- 法3:使用clip,不对原始序列进行修改
clip的第一个参数表示目标区间最小值,第二个参数表示最大值,原始序列凡小于这个最小值的被这个最小值所替换,凡大于这个最大值的被这个最大值替换,必须指定一个参数,则另一个参数默认为x.clip(0, 5)
或者x.clip(0)
。那么如何使用一个参数表示最大值呢?这时可以用named argument
,即x.clip(max=5)
>>> x.clip(0)array([0, 0, 0, 0, 0, 0, 1, 2, 3, 4])
我们看到,如果将所有小于零的元素置为nan,clip是无能为力的,这时只能使用布尔矩阵,或者np.where函数了:
>>> x = np.array([1., 2., -3., 4, -5.])>>> x[x<0] = np.nan>>> xarray([ 1., 2., nan, 4., nan])
>>> np.where(x<0, np.nan, x)array([ 1., 2., nan, 4., nan])
ndarray
>>> x = np.ones(3)>>> x array([1., 1., 1.])>>> x.shape(3,) # 一个元素的元组>>> y = np.ones((3, 1))>>> yarray([[ 1.], [ 1.], [ 1.]])>>> y.shape(3, 1)# 下述的运算对x=x.reshape((1, 3))也是成立的。# (1, 3)op(3, 1)还是(3, 1)op(1, 3)最运算的结果都是以笛卡尔积的形式排列>>> x+yarray([[ 2., 2., 2.], [ 2., 2., 2.], [ 2., 2., 2.]])>>> y+xarray([[ 2., 2., 2.], [ 2., 2., 2.], [ 2., 2., 2.]]) >>> x==yarray([[ True, True, True], [ True, True, True], [ True, True, True]], dtype=bool)
再来看这样一种情况:
>>> w = np.ones(3)>>> w.shape(3,)>>> X = np.ones((5, 3))>>> Xarray([[ 1., 1., 1.], [ 1., 1., 1.], [ 1., 1., 1.], [ 1., 1., 1.], [ 1., 1., 1.]])>>> np.dot(X, w)array([ 3., 3., 3., 3., 3.])>>> np.dot(X, w).shape(5, )>>>> X*warray([[ 1., 1., 1.], [ 1., 1., 1.], [ 1., 1., 1.], [ 1., 1., 1.], [ 1., 1., 1.]]) # 逐行再element-wise相乘
如果这时:
>>> w = w.reshape((3, 1))>>> warray([[ 1.], [ 1.], [ 1.]])>>> np.dot(X, w) array([[ 3.], [ 3.], [ 3.], [ 3.], [ 3.]]) # 标准的矩阵乘法>>> X*wValueError: operands could not be broadcast together with shapes (5,3) (3,1)
np.nan_to_num
>>> x = np.nan>>> xnan>>> math.isnan(x)True>>> np.isnan(x)True>>> np.nan_to_num(x)0.0>>> x = np.inf>>> xinf>>> np.isinf(x)True>>> np.nan_to_num(x)1.7976931348623157e+308
场景
>>> np.log(0)-inf>>> 0*(-np.inf)nan>>> 0*np.log(0)nan>>> np.nan_to_num(0*np.log(0))0.0
0*np.log(0)
直接这样的情况我们尚可避免,但如果通过变量的形式进行计算(比如
>>> np.nan + 10nan
对nan
进行运算最终的结果仍是nan
,故我们需要对这样的情况进行转换,这时就需要np.nan_to_num
进行转换,避免干扰。
我们引入交叉熵(cross-entropy)作为代价函数,也即:
列项求和相加,第一个反应是使用更为便捷的内积运算,也即:
使用python语言实现:
def fn(a, y): # a, y都是列向量 return -(np.dot(y.transpose(), np.log(a))+np.dot((1-y), np.log(1-a)))
问题出现在,执行内积运算,对应位相乘有可能出现
>>> 0*np.nan_to_num(np.log(0))0.0
我们或者:
def fn(a, y): return -(np.dot(y.transpose(), np.nan_to_num(np.log(a)))+np.dot((1-y).transpose(), np.nan_to_num(np.log(1-a))))
或者:
def fn(a, y): return -np.sum(np.nan_to_num(y*np.log(a)+(1-y)*np.log(1-a)))
np.cumsum()
np.cumsum(a)函数返回一个多维数组,其shape等于a的shape
p = np.random.random(100000)rolls = np.random.random((11, len(p)))Alice_wins = np.cumsum(rolls < p, 0) # 0,表示列向Bob_wins = np.cumsum(rolls >= p, 0) # 0,表示列向
首先需要说明的是,np.array() < 0
,返回的是bool
元素类型的多维数组。也即上述代码中的rolls < p
,也即np.cumsum()
的第一个参数为多维元组类型。np.cumsum(rolls < p, 0)
,第二个参数0
表示在列的方向进行累积相加。
- numpy 常用api(一)
- numpy 常用api(二)
- numpy 常用api(三)
- numpy 常用api(四)
- numpy 常用api(四)
- numpy 常用 api(四)
- numpy 常用操作矩阵(API 简介)
- numpy: 常用api速查
- numpy常用API用法总结
- sklearn 常用api(一)
- Java常用API(一)
- NumPy使用(一)
- numpy实用技巧(一)
- NumPy学习(一)
- NumPy doc (一)
- Numpy(一)
- numpy基础(一)
- Numpy学习(一)
- 关于Python脚本开头两行的:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 指定文件编码类型
- 用C的数据类型宽度扩展来解释char c=128;printf("%d",c);问题
- zend studio 打开在同目录下的项目文件
- 告警exc_bad_access copy assign 重写setter方法时
- Android 事件分发机制
- numpy 常用api(一)
- 查看并释放内存
- Eclipse配置Tomcat服务器
- WEB网站防御XSS攻击思路和XSS实践
- 《图像局部不变性特征与描述》阅读笔记(2)-- 图像尺度空间
- 静态代码检测工具Cpplint
- Windows多线程总结(3)-- 线程同步(使用互斥对象实现线程同步)
- HDU 1083 Courses(二分图匹配)
- ajax接口之二:调用服务