『Numpy』常用方法记录
防止输出省略号
import numpy as np
np.set_printoptions(threshold=np.inf)
广播机制
numpy计算函数返回默认是一维行向量:
import numpy as np a = [[1,1,1],
[2,2,2],
[3,3,3]]
b = (np.sum(a,axis=1))
c = (np.sum(a,axis=0))
print(b,'\n',c) # [3 6 9]
# [6 6 6]
所以广播之实际是高维对一维行向量的广播:
除法广播:
b = a/(np.sum(a,axis=1))
c = a/(np.sum(a,axis=0))
print(b,'\n',c) # [[ 0.33333333 0.16666667 0.11111111]
# [ 0.66666667 0.33333333 0.22222222]
# [ 1. 0.5 0.33333333]]
# [[ 0.16666667 0.16666667 0.16666667]
# [ 0.33333333 0.33333333 0.33333333]
# [ 0.5 0.5 0.5 ]]
向量乘法,加法可以类比:
np.array([1,2,3])*np.array([1,1,1])
# [1 2 3] np.array([1,2,3])*np.array([1])
# [1 2 3] np.array([1,2,3])*np.array([1,1])
# 报错 np.array([[1],[1],[1]])*np.array([1,2,3])
# [[1 2 3]
# [1 2 3]
# [1 2 3]]
线性代数相关
np.diag():对角阵生成
np.linalg.det():求行列式
np.linalg.inv():矩阵求逆
np.linalg.eig():对称阵特征值分解
np.linalg.svd():任意阵SVD分解
通用函数
使单输入单输出的函数具备广播功能,frompyfunc(fun, in_num, out_num),常用f = frompyfunc(fun, 1, 1)
>>> oct_array = np.frompyfunc(oct, 1, 1) >>> oct_array(np.array((10, 30, 100)))
array([012, 036, 0144], dtype=object) >>> np.array((oct(10), oct(30), oct(100))) # for comparison
array(['012', '036', '0144'],
dtype='|S4')
np.sum(array1 == array2,dtype=float)
bool转换为数组默认是整形,需要手动修改为浮点型,比较值得注意的tip,或者说由于python本身不做区分,所以在numpy中必须特别注意数字类型的问题
取整
np.rint(result) # 四舍五入
np.ceil(result) # 向上取整
np.floor(result) # 向下取整
np.unique()
保留数组中不同的值
>>> a=np.random.randint(0,5,8)
>>> a
array([2, 3, 3, 0, 1, 4, 2, 4]) >>> np.unique(a)
array([0, 1, 2, 3, 4]) >>> c,s=np.unique(b,return_index=True)
>>> c
array([0, 1, 2, 3, 4])
>>> s
array([3, 4, 0, 1, 5])(元素出现的起始位置)
np.full((shape), value, type)
numpy数组初始化函数
np.split(array, num)
把数组顺序等分
np.fun.at(array, index_array, [array2])
fun需要一个参数时等价np.fun(array[index_array]),多参数用法如下:
Examples
Increment items 0 and 1, and increment item 2 twice:
>>> a = np.array([1, 2, 3, 4])
>>> np.add.at(a, [0, 1, 2, 2], 1)
>>> print(a)
array([2, 3, 5, 4])Add items 0 and 1 in first array to second array, and store results in first array:
>>> a = np.array([1, 2, 3, 4])
>>> b = np.array([1, 2])
>>> np.add.at(a, [0, 1], b)
>>> print(a)
array([2, 4, 3, 4])
特色,
#np.add.at(dW, x, dout)
#dW[x] += dout # this will not work, see the doc of np.add.at
a = np.array([1,2,3,4,5,6,7])
i = np.array([0,1,2,0,1])
b = np.array([1,2,3,4,5])
np.add.at(a, i, b)
print(a)
a = np.array([1,2,3,4,5,6,7])
i = np.array([0,1,2,0,1])
b = np.array([1,2,3,4,5])
a[i] += b
print(a)
输出如下,即索引重复的时候,只有np.add.at会累积前面的结果,单纯的索引会取最后一次的结果覆盖,
[6 9 6 4 5 6 7]
[5 7 6 4 5 6 7]
np.save() & np.load()
np.save('./bottleneck/{1}/{0}'.format(img.split('/')[-1].split('.')[0], file_name),bottleneck_values)bottleneck_string = np.load(os.path.join(base_path,
'bottleneck',
train_or_test,
label_name,
bottlenecks_tensor_name))
np.loadtxt()
# 本函数读取数据后自动转化为ndarray数组,可以自行设定分隔符delimiter=","
np.loadtxt('housing.data') # 读取数据
np.insert()
np.insert(scale_data, 0, 1, axis=1) # 数组插入函数
在数组中插入指定的行列,numpy.
insert
(arr, obj, values, axis=None),和其他数组一样,axis不设定的话会把数组定为一维后插入,axis=0的话行扩展,axis=1的话列扩展
np.matrix()
学习了numpy中的矩阵类型:np.matrix(),在牛顿法中我用的是matrix,在梯度下降法中我用的是array:
matrix是array的子类,特点是有且必须只是2维,matrix.I()可以求逆,和线代的求逆方法一致,所以绘图时我不得不才用np.sequeeze(np.asarray())操作来降维,而由于x[:, -1]这种操作对array会自动降维(由两行变为一行),所以要么使用matrix,要么切片后reshape(2,1),总之不消停。
np.concatenate()
注意到数组拼接方法都是不破坏原数组,单纯返回新数组的,且axis=0是行拼接(行数增加),axis=1是列拼接(列数增加),
x_n = np.concatenate((x_n, x_n[:,-1] - np.linalg.inv(H).dot(dx_n)),axis=1)
np.nxis
np.exped_dim
用于扩展维度,numpy不仅有expend_dim这样的函数,也可以使用np.newaxis标记来实现扩维:
a = np.array([1,2,3,4,5])
a = a[:,np.newaxis]
a
Out[44]:
array([[1],
[2],
[3],
[4],
[5]])
a = np.array([1,2,3,4,5])
a = a[np.newaxis,:]
a
Out[47]:
array([[1, 2, 3, 4, 5]])
array.transpose(1,0,2)
转置,1维没效果(并不能行列互化),高维后面参数维转置顺序,假如(T,N,H)经过上面的命令会变为(N,T,H)
np.bincount()
计数&投票函数
np.maximum(X, Y, out=None):
- X 与 Y 逐位比较取其大者;
- 最少接收两个参数
np.squeeze():剔除长度为一的轴
np.squeeze(np.array([[1,2,3]]))
# Out[17]:
# array([1, 2, 3])
np.squeeze(np.array([[1],[2],[3]]))
# Out[18]:
# array([1, 2, 3])
numpy.roll():平移数组行列
>>> x = np.arange(10)
>>> np.roll(x, 2)
array([8, 9, 0, 1, 2, 3, 4, 5, 6, 7])
>>> x2 = np.reshape(x, (2,5))
>>> x2
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
>>> np.roll(x2, 1)
array([[9, 0, 1, 2, 3],
[4, 5, 6, 7, 8]])
>>> np.roll(x2, 1, axis=0)
array([[5, 6, 7, 8, 9],
[0, 1, 2, 3, 4]])
>>> np.roll(x2, 1, axis=1)
array([[4, 0, 1, 2, 3],
[9, 5, 6, 7, 8]])
计算机视觉中人为建立图像抖动会使用这个函数:
ox, oy = np.random.randint(-max_jitter, max_jitter+1, 2) # 随机抖动生成
X = np.roll(np.roll(X, ox, -1), oy, -2) # 抖动,注意抖动不是随机噪声 pass X = np.roll(np.roll(X, -ox, -1), -oy, -2) # 还原抖动
『Numpy』常用方法记录的更多相关文章
- 『Json』常用方法记录
json模块可以把字典结构改写为string然后保存,并可以反向读取字典 pickle模块则可以持久化任意数据结构 但是即使同样是字典数据结构,两个包也是有差别的, json字典value不支持其他对 ...
- 『Os』常用方法记录
os.rename(name_old, name_new) 『Scrapy』爬取斗鱼主播头像 重命名函数os.rename比win下的重命名强多了,它可以对路径重命名达到修改文件位置的功效. os.p ...
- 『Scipy』常用方法记录
优化器使用教程 J = lambda wb: self.get_cost_grad(wb, X, Y_one_hot) theta = self.wb_init(X,Y_one_hot) result ...
- 『Glob』常用方法记录
glob.glob(file) 返回匹配的文件 glob.glob(./flower_photos/tulips/*.jpg) Out[1]:<br># ['./flower_photos ...
- 『Numpy』内存分析_高级切片和内存数据解析
在计算机中,没有任何数据类型是固定的,完全取决于如何看待这片数据的内存区域. 在numpy.ndarray.view中,提供对内存区域不同的切割方式,来完成数据类型的转换,而无须要对数据进行额外的co ...
- 『Nltk』常用方法
引言 在nltk的介绍文章中,前面几篇主要介绍了nltk自带的数据(书籍和语料),感觉系统学习意义不大,用到哪里看到那里就行(笑),所以这里会从一些常用功能开始,适当略过对于数据本体的介绍. 文本处理 ...
- 『Numpy』内存分析_numpy.dtype解析内存数据
numpy.dtype用于自定义数据类型,实际是指导python程序存取内存数据时的解析方式. [注意],更改格式不能使用 array.dtype=int32 这样的硬性更改,会不改变内存直接该边解析 ...
- 『Numpy』内存分析_利用共享内存创建数组
引.内存探究常用函数 id(),查询对象标识,通常返回的是对象的地址 sys.getsizeof(),返回的是 这个对象所占用的空间大小,对于数组来说,除了数组中每个值占用空间外,数组对象还会存储数组 ...
- 『Numpy』np.ravel()和np.flatten()
What is the difference between flatten and ravel functions in numpy? 两者的功能是一致的,将多维数组降为一维,但是两者的区别是返回拷 ...
随机推荐
- python requests 请求的封装
#encoding=utf-8import requestsimport jsonclass HttpClient(object): def __init__(self): pas ...
- [转载]论asp.net out、ref、return
论asp.net out.ref.return ref(引用类型) ref引用类型进出都必须赋值,赋值后会改变类型原来的指针. out(值类型) out值类型进可以不赋值,出必须赋值. r ...
- Linux vmstat命令实际操作介绍
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存.进程.CPU活动进行监控.它能够对系统的整体情况进行统计,无法对某个进程进行深入分析. ...
- SNMP学习笔记之SNMPv3的配置和认证以及TroubleShooting
0x00 增加snmp v3用户 增加用户的时候,必须要停止SNMP服务. # service snmpd stop # net-snmp-config --create-snmpv3-user -r ...
- Python入门之python装饰器的4种类型:函数装饰函数、函数装饰类、类装饰函数、类装饰类
一:函数装饰函数 def wrapFun(func): def inner(a, b): print('function name:', func.__name__) r = func(a, b) r ...
- bzoj1643 / P2666 [Usaco2007 Oct]Bessie's Secret Pasture 贝茜的秘密草坪
[Usaco2007 Oct]Bessie's Secret Pasture 贝茜的秘密草坪 简单的dfs题 枚举前3个完全平方数,判断最后一个是不是完全平方数,统计合法方案数即可. (zz选手竟把数 ...
- P4555 [国家集训队]最长双回文串
P4555 [国家集训队]最长双回文串 manacher 用manacher在处理时顺便把以某点开头/结尾的最长回文串的长度也处理掉. 然后枚举. #include<iostream> # ...
- 如何用tomcat发布自己的Java项目
如何用tomcat发布自己的Java项目 tomcat是什么?它是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器.我们用Java开发出来的web项目,通过tomcat发布出来,别人就可 ...
- ssh连接linux服务器不断开- "Write failed: Broken pipe"
我自己用阿里云的服务器的时候,发现ssh连上以后,一会不用就断掉了,非常不方便,服务端的系统是ubuntu. 查了些东西,原来可以去配置服务端的sshd,或者客户端的ssh,就行了. 1,配置服务器端 ...
- [noip模拟题]合理种植
[问题描述] 大COS在氯铯石料场干了半年,受尽了劳苦,终于决定辞职.他来到表弟小cos的寒树中学,找到方克顺校长,希望寻个活干. 于是他如愿以偿接到了一个任务…… 美丽寒树中学种有许多寒树.方克顺希 ...