numpy 常用api(一)
numpy 常用api(二)
numpy 常用api(三)
clip
两个版本:
np.clip
作为成员函数,
x.clip
将一序列(sequence)中所有小于零的元素置零:
>>> x = np.arange(-5, 5)
>>> x
array([-5, -4, -3, -2, -1, 0, 1, 2, 3, 4])
法1,布尔索引
>>> x<0 array([ True, True, True, True, True, False, False, False, False, False], dtype=bool) >>> x[x<0] = 0 >>> x array([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的第一个参数表示目标区间最小值,第二个参数表示最大值,原始序列凡小于这个最小值的被这个最小值所替换,凡大于这个最大值的被这个最大值替换,必须指定一个参数,则另一个参数默认为∞\infty。如果使用位置参数(positional argument),第一个位置表示最小值,第二个位置表示最大值,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
>>> x
array([ 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))
>>> y
array([[ 1.],[ 1.],[ 1.]])
>>> y.shape
(3, 1)# 下述的运算对x=x.reshape((1, 3))也是成立的。
# (1, 3)op(3, 1)还是(3, 1)op(1, 3)最运算的结果都是以笛卡尔积的形式排列
>>> x+y
array([[ 2., 2., 2.],[ 2., 2., 2.],[ 2., 2., 2.]])
>>> y+x
array([[ 2., 2., 2.],[ 2., 2., 2.],[ 2., 2., 2.]])
>>> x==y
array([[ True, True, True],[ True, True, True],[ True, True, True]], dtype=bool)
再来看这样一种情况:
>>> w = np.ones(3)
>>> w.shape
(3,)
>>> X = np.ones((5, 3))
>>> X
array([[ 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*w
array([[ 1., 1., 1.],[ 1., 1., 1.],[ 1., 1., 1.],[ 1., 1., 1.],[ 1., 1., 1.]]) # 逐行再element-wise相乘
如果这时:
>>> w = w.reshape((3, 1))
>>> w
array([[ 1.],[ 1.],[ 1.]])
>>> np.dot(X, w)
array([[ 3.],[ 3.],[ 3.],[ 3.],[ 3.]]) # 标准的矩阵乘法
>>> X*w
ValueError: operands could not be broadcast together with shapes (5,3) (3,1)
np.nan_to_num
>>> x = np.nan
>>> x
nan
>>> math.isnan(x)
True
>>> np.isnan(x)
True>>> np.nan_to_num(x)
0.0>>> x = np.inf
>>> x
inf
>>> 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)
直接这样的情况我们尚可避免,但如果通过变量的形式进行计算(比如y×ln(a)+(1−y)×ln(1−a)y\times \ln(a)+(1-y)\times \ln(1-a)),以及变量会随着程序的运行其值会发生一些变化,这种情况下就很难避免了nan的出现了。而我们有知道
>>> np.nan + 10
nan
对nan
进行运算最终的结果仍是nan
,故我们需要对这样的情况进行转换,这时就需要np.nan_to_num
进行转换,避免干扰。
我们引入交叉熵(cross-entropy)作为代价函数,也即:
C=-\sum_jy_j\ln{a_j^L}+(1-y_j)\ln (1-a_j^L)
列项求和相加,第一个反应是使用更为便捷的内积运算,也即:
C=-(y\cdot \ln{a^L}+(1-y)\cdot\ln(1-a^L))
使用python语言实现:
def fn(a, y): # a, y都是列向量return -(np.dot(y.transpose(), np.log(a))+np.dot((1-y), np.log(1-a)))
问题出现在,执行内积运算,对应位相乘有可能出现0×log(0)=nan0\times \log(0)=nan的情况,在进行相加时会破坏整个内积运算的结果。
>>> 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(一) 0. np.delete() 属非更易型操作,是为了获取返回值,对原始数据不会进行修改: from sklearn.datasets import load_iris i ...
- numpy 常用api(二)
多维数组的索引 >>> import numpy as np >>> a = np.zeros((3, 3, 3)) >>> a[0, 0] = ...
- Numpy常用API
文章目录 一.numpy介绍 1.ndarray介绍 2.python列表和Numpy数组的区别 二.NumPy 基础 1.ndarry数组 2.内存中的ndarry对象 3.ndarry数组对象的创 ...
- numpy 常用api(四)
np.nonzero():返回全部非零元素的下标 (1)返回的是元组(tuple)(tuple of arrays) np.nonzero()[0]:返回的是行号 np.nonzero()[1]:返回 ...
- numpy 常用工具函数 —— np.bincount/np.average
<a href="http://blog.csdn.net/lanchunhui/article/details/50072453", target="_blank ...
- python数据分析 - numpy | ndarray数组 | numpy常用函数
文章目录 数据分析 numpy概述 numpy历史 numpy的核心:多维数组 numpy基础 ndarray数组 内存中的ndarray对象 ndarray数组对象的特点 ndarray数组对象的创 ...
- 数据分析之numpy基础/matplotlib绘图/numpy常用函数/杂项功能
文章目录 数据分析 numpy概述 numpy`历史` numpy的核心:多维数组 numpy基础 ndarray数组 内存中的ndarray对象 ndarray数组对象的特点 ndarray数组对象 ...
- TensorFlow—Keras常用API
TensorFlow-Keras常用API 文章目录 TensorFlow-Keras常用API 前言 一.模型自定义 1. keras.Sequential 2.keras.layers.Layer ...
- Python数据分析——Numpy常用函数
numpy常用函数 加载文件 numpy提供了函数用于加载逻辑上可被解释为二维数组的文本文件,格式如下: 数据项1 <分隔符> 数据项2 <分隔符> ... <分隔符&g ...
最新文章
- 记录篇,自己在项目中使用过的。
- .NET 中使用 Mutex 进行跨越进程边界的同步 - walterlv
- 17-Translation (XLAT) Tables Library
- 无公网域名,使用ngrok开启反向代理,实现公网域名访问本地项目
- pdfbox java.lang.outofmemoryerror_java - PDFBox 2.0.1挂起渲染pdf页面 - 堆栈内存溢出
- DNN永日新闻模块(YongRi)免费1.00.09版本下载
- 使用BERT进行跨领域情感分析
- 适用于物联网数据共享的区块链节点存储优化方案
- tp5.0 百度编辑器上传图片到阿里云oss
- 微积分——傅里叶级数
- glTexSubImage2D的使用详解
- 天刀霸王枪服务器怎么维护了,霸王枪27日合服 11批天涯合服维护公告
- 敬你一杯酒,从此莫回头。往事归零,爱恨随意。我干杯,你随意
- 有关于进程,线程and协程
- Wavel Sequence HDU - 6078 (dp)
- iphone6 计算机无法检测到照相机,苹果iPhone XR摄像头黑屏不能照相是什么原因?...
- 快应用开发中常见的几个版本号~~
- “盲盒抽奖”创意营销活动实践
- 大数据挖掘技术在金融保险行业中的用途
- 从苏宁电器到卡巴斯基(第二部)第07篇:我在卡巴的日子 VII
热门文章
- Zookeeper配置参数与节点值的解读
- c++函数不允许递归_递归优化的这三种方式你知道吗?
- dnf上海2服务器维护,DNF上海2出现大面积盗号并迅速蔓延请注意
- CUDA——线程配置
- 【OpenCV人脸识别2】从视频中检测人脸
- Learn OpenGL(二)——顶点输入(Vertex Input)
- 动态添加和删除 ListView 项
- Vue, element-ui Module build failed: Error: No PostCSS Config found
- oracle安装总结
- MVCJSONJQuery分页实现