博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python numpy模块使用笔记(更新)
阅读量:6902 次
发布时间:2019-06-27

本文共 9997 字,大约阅读时间需要 33 分钟。

np.arange(int a)

生成一个一维array,元素个数是a个,元素是0到a-1

注意arange不能直接生成多维array

np.arange(int a).reshape(int b,int c)

生成一个一维array,个数为a,然后改成二维数组b*c,b*c=a;也可更多维

reshape与原shape无关,只要总元素个数符合即可

reshape返回的对象实际是原array的一个引用,仅形式不一样,改变一个,两个都会变

np.arange(int a, dtype=np.uint8)

生成一个类型为np.uint8(或其他参数)的一维数组,个数为a

np.arange(a,b)

生成一个array,从a开始,到b以内,间隔为1,浮点数则间隔为1.0

np.arange(a,b,c)

生成一个array,从a开始,到b以内,间隔为c

array的直接赋值不产生新的array

np.zeros()构造一个全0.0的array

np.ones()构造一个全1.0的array

np.full( (tuple shape) , num ) 构造一个全为num的array,大小由shape规定

np.eye( int d )构造一个d维(d*d)的单位矩阵array

1 import numpy as np 2 a = np.array([[1,2,3],[1,2]]) 3 print("a", a) 4 b = a 5 print("b is a? ", b is a) 6 c = np.zeros((3,4)) 7 print("c", c) 8 d = np.ones((3,4),dtype=np.int16) 9 print("d", d)10 e = np.empty((3,4))11 print("e", e)12 f = np.arange(10.1,20.0)13 print("f", f)14 g = np.arange(12).reshape((3,4)).reshape((2,2,3))15 h = g.reshape((3,4))16 h[0][0] = 10017 print("h is g?", h is g)18 print(g)19 i = np.linspace(1,10,19)20 print("i", i)
a [list([1, 2, 3]) list([1, 2])]b is a?  Truec [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]]d [[1 1 1 1] [1 1 1 1] [1 1 1 1]]e [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]]f [10.1 11.1 12.1 13.1 14.1 15.1 16.1 17.1 18.1 19.1]h is g? False[[[100   1   2]  [  3   4   5]] [[  6   7   8]  [  9  10  11]]]i [ 1.   1.5  2.   2.5  3.   3.5  4.   4.5  5.   5.5  6.   6.5  7.   7.5  8.   8.5  9.   9.5 10. ]

 

np.array(list l)

用list类型的对象l生成一个新的array

np.array(ndarray l)

用ndarray类型的对象l生成一个新的array

np.asarray(list l)

用list类型的对象l生成一个新的array

np.asarray(ndarray l)

用ndarray类型的对象l生成一个array,但两者是同一个对象

1 a = [0,1,2] 2 b = np.arange(3) 3 c = np.array(a) 4 d = np.array(b) 5 e = np.asarray(a) 6 f = np.asarray(b) 7 a[0] = 1 8 b[0] = 1 9 print(c,d)10 print(e,f)11 print("f is b?", f is b)
[0 1 2] [0 1 2][0 1 2] [1 1 2]f is b? True

 

a.copy()将a的值copy出来,生成一个新对象

1 a = np.ones((1,3))2 b = a.copy()3 b[0][0] = 04 print(a,b)
[[1. 1. 1.]] [[0. 1. 1.]]

 

a.ndim

维数

a.shape

形状,几乘几乘几的array

a.size

元素个数

a.dtype

元素类型

1 print(a.ndim)2 print(a.shape)3 print(a.size)4 print(a.dtype)5 print(type(a))
2(2, 3)6float64

 

基本运算都是对于array内的元素的运算

运算,+-*\&|^等二元运算符运用于两个shape相同的array间,结果是对应位置的元素分别运算

幂次**等运算符结果是每个元素分别进行幂运算

比较运算同样是对每个元素进行操作

np.sin(ndarray a)

np.cos(ndarray a)

np.tan(ndarray a)

1 a = np.arange(2,5)2 b = np.arange(1,4)3 print(a,b)4 print(a+b,a-b,a*b,a/b,a&b,a|b,a^b)5 print(a**3)6 print(a
<3)7 print(np.sin(a))
[2 3 4] [1 2 3][3 5 7] [1 1 1] [ 2  6 12] [2.         1.5        1.33333333] [0 2 0] [3 3 7] [3 1 7][ 8 27 64][False False False] [ True False False][ 0.90929743  0.14112001 -0.7568025 ]

 

np.dot(ndarray a,ndarray b)

a.dot(ndarray b)

对于一维array,效果同向量点积,需满足长度相等

对于高维array,效果为矩阵乘法,需满足矩乘要求

a.transpose()或a.T矩阵转置,对一维array无效

1 a = np.arange(0,6)2 print("1: ", a,a.T)3 print("2: ", a.dot(a))4 a = a.reshape((2,3))5 print("3: ", a)6 print("4: ", a.T)7 print("5: ", a.transpose())8 print("6: ", a.dot(a.T))9 print("7: ", a.T.dot(a))
1:  [0 1 2 3 4 5] [0 1 2 3 4 5]2:  553:  [[0 1 2] [3 4 5]]4:  [[0 3] [1 4] [2 5]]5:  [[0 3] [1 4] [2 5]]6:  [[ 5 14] [14 50]]7:  [[ 9 12 15] [12 17 22] [15 22 29]]

 

np.random.random(shape)根据shape随机生成array,元素在0到1间

np.median(ndarray a[, axis=0])中位数

np.average(ndarray a[, axis=0])均值

np.diff(ndarray a[, axis=0])差分

a.max([axis=0])

a.min([axis=0])

a.sum([axis=0])

a.cumsum([axis=0])前缀和

a.mean([axis=0])求均值

a.argmax([axis=0])这个函数应该是对于值相同的情况取其中的第一个

np.sort(ndarray a[, axis=0])排序,默认按最高维排序

np.sqrt(ndarray a)对每个元素分别开方

定义axis则对于某一维进行分别运算

1 a = np.random.random((2,5)) 2 print("a", a) 3 print("sum", a.sum()) 4 print("cumsum 1", a.cumsum()) 5 print("cumsum 2", a.cumsum(axis=0)) 6 print("diff", np.diff(a)) 7 print("argmax", a.argmax(axis=0)) 8 print("max", a.max(axis=1)) 9 print("mean", a.mean(axis=1))10 print("median", np.median(a,axis=1))11 print("sort", np.sort(a,axis=0))
a [[0.17921251 0.56586623 0.47136818 0.10203327 0.91359077] [0.79646881 0.30153261 0.06144976 0.46015996 0.61220888]]sum 4.463890979638066cumsum 1 [0.17921251 0.74507874 1.21644692 1.31848019 2.23207096 3.02853977 3.33007238 3.39152214 3.8516821  4.46389098]cumsum 2 [[0.17921251 0.56586623 0.47136818 0.10203327 0.91359077] [0.97568132 0.86739883 0.53281794 0.56219323 1.52579964]]diff [[ 0.38665372 -0.09449805 -0.36933491  0.81155749] [-0.49493621 -0.24008284  0.3987102   0.15204892]]argmax [1 0 0 1 0]max [0.91359077 0.79646881]mean [0.44641419 0.446364  ]median [0.47136818 0.46015996]sort [[0.17921251 0.30153261 0.06144976 0.10203327 0.61220888] [0.79646881 0.56586623 0.47136818 0.46015996 0.91359077]]

 

a.nonzero()输出所有非零元素的下标,输出结果为一个tuple,共维数个array,表示所有元素的每一维下标

a.clip(min,max)将小于min值的设为min值,大于max值的设为max值,返回为新的array

1 a = np.arange(0,16).reshape((2,2,2,2))2 print(a)3 print(a.nonzero())4 print(np.zeros(10).nonzero())
[[[[ 0  1]   [ 2  3]]  [[ 4  5]   [ 6  7]]] [[[ 8  9]   [10 11]]  [[12 13]   [14 15]]]](array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1], dtype=int64), array([0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1], dtype=int64), array([0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1], dtype=int64), array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1], dtype=int64))(array([], dtype=int64),)
1 a = np.random.random((2,5))2 print(a)3 print(a.clip(0.25,0.75))
[[0.13959892 0.82723864 0.46736009 0.81501597 0.73909778] [0.93349076 0.46512676 0.49638509 0.81460657 0.98483514]][[0.25       0.75       0.46736009 0.75       0.73909778] [0.75       0.46512676 0.49638509 0.75       0.75      ]]

 

a.flatten()将a所有元素列成一个一维array

a.flat a的迭代器

1 a = np.arange(0,6).reshape((2,3))2 print(a)3 print(a.flatten())4 for item in a.flat:5     print(item)

 

[[0 1 2] [3 4 5]][0 1 2 3 4 5]012345

 

 

a[np.newaxis]将原对象作为一个元素放进一个array里,即在最外面加了一维

a[:[,:],np.newaxis]按照np.newaxis之前的切片表示的遍历最小元素,将每个元素放进一个array

这种操作都没有产生新的对象

1 a = np.arange(0,6) 2 print(a[np.newaxis]) 3 print(a[:,np.newaxis]) 4 a[np.newaxis][0][1] = 0 5 print(a) 6 print("a[np.newaxis][0][1] is a?",a[np.newaxis][0][1] is a) 7 b = np.arange(0,6).reshape((2,3)) 8 print("1: ", b[np.newaxis]) 9 print("2: ", b[:,np.newaxis])10 print("3: ", b[:,:,np.newaxis])
[[0 1 2 3 4 5]][[0] [1] [2] [3] [4] [5]][0 0 2 3 4 5]a[np.newaxis][0][1] is a? False1:  [[[0 1 2]  [3 4 5]]]2:  [[[0 1 2]] [[3 4 5]]]3:  [[[0]  [1]  [2]] [[3]  [4]  [5]]]

 

np.vstack(ndarray a, ndarray b[,...])将a、b整体进行连接,合成一个ndarray,要求a和b除第一维外其余维一样,合并后得到的第一维为a、b的第一维相加,第二维shape不变

np.hstack(ndarray a, ndarray b[,...])将a、b的每一个第一维元素进行连接,合成一个ndarray,要求第二维外其余维一样,合并后第二维为a、b的第二维相加,其余维不变

np.concatenate((ndarray a, ndarray b[,...]),axis=0)可以自由定义以第几维进行连接,除指定维外其余维一样

对于一维array,运算时当做1*n的array进行连接,运算完h连接会产生1*2n的array,仍变成一维的长2n的array,而v连接产生2*n的array

连接操作均返回新的对象

1 a = np.arange(0,6).reshape((2,3)) 2 b = np.arange(6,12).reshape((2,3)) 3 print("a: ", a) 4 print("b: ", b) 5 print("vab: ", np.vstack((a,b))) 6 print("hab: ", np.hstack((a,b))) 7 print(a.shape,b.shape,np.vstack((a,b)).shape) 8 print(a.shape,b.shape,np.hstack((a,b)).shape) 9 a = np.arange(0,6)10 b = np.arange(6,12)11 print("a: ", a)12 print("b: ", b)13 print("vab: ", np.vstack((a,b)))14 print("hab: ", np.hstack((a,b)))15 print(a.shape,b.shape,np.vstack((a,b)).shape)16 print(a.shape,b.shape,np.hstack((a,b)).shape)17 a = np.arange(0,6).reshape((1,6))18 b = np.arange(6,12).reshape((1,6))19 print("a: ", a)20 print("b: ", b)21 print("vab: ", np.vstack((a,b)))22 print("hab: ", np.hstack((a,b)))23 print(a.shape,b.shape,np.vstack((a,b)).shape)24 print(a.shape,b.shape,np.hstack((a,b)).shape)
a:  [[0 1 2] [3 4 5]]b:  [[ 6  7  8] [ 9 10 11]]vab:  [[ 0  1  2] [ 3  4  5] [ 6  7  8] [ 9 10 11]]hab:  [[ 0  1  2  6  7  8] [ 3  4  5  9 10 11]](2, 3) (2, 3) (4, 3)(2, 3) (2, 3) (2, 6)a:  [0 1 2 3 4 5]b:  [ 6  7  8  9 10 11]vab:  [[ 0  1  2  3  4  5] [ 6  7  8  9 10 11]]hab:  [ 0  1  2  3  4  5  6  7  8  9 10 11](6,) (6,) (2, 6)(6,) (6,) (12,)a:  [[0 1 2 3 4 5]]b:  [[ 6  7  8  9 10 11]]vab:  [[ 0  1  2  3  4  5] [ 6  7  8  9 10 11]]hab:  [[ 0  1  2  3  4  5  6  7  8  9 10 11]](1, 6) (1, 6) (2, 6)(1, 6) (1, 6) (1, 12)
1 a = np.arange(0,6).reshape((2,3)) 2 b = np.arange(6,10).reshape((2,2)) 3 print("a: ", a) 4 print("b: ", b) 5 print("hab: ", np.hstack((a,b))) 6 print(a.shape,b.shape,np.hstack((a,b)).shape) 7 a = np.arange(0,6).reshape((3,2)) 8 b = np.arange(6,10).reshape((2,2)) 9 print("a: ", a)10 print("b: ", b)11 print("vab: ", np.vstack((a,b)))12 print(a.shape,b.shape,np.vstack((a,b)).shape)13 a = np.arange(0,12).reshape((2,2,3))14 b = np.arange(12,20).reshape((2,2,2))15 print("a: ", a)16 print("b: ", b)17 print("cab-2: ", np.concatenate((a,b),axis=2))18 print(a.shape,b.shape,np.concatenate((a,b),axis=2).shape)
a:  [[0 1 2] [3 4 5]]b:  [[6 7] [8 9]]hab:  [[0 1 2 6 7] [3 4 5 8 9]](2, 3) (2, 2) (2, 5)a:  [[0 1] [2 3] [4 5]]b:  [[6 7] [8 9]]vab:  [[0 1] [2 3] [4 5] [6 7] [8 9]](3, 2) (2, 2) (5, 2)a:  [[[ 0  1  2]  [ 3  4  5]] [[ 6  7  8]  [ 9 10 11]]]b:  [[[12 13]  [14 15]] [[16 17]  [18 19]]]cab-2:  [[[ 0  1  2 12 13]  [ 3  4  5 14 15]] [[ 6  7  8 16 17]  [ 9 10 11 18 19]]](2, 2, 3) (2, 2, 2) (2, 2, 5)
1 a = np.arange(0,6)2 b = np.arange(6,12)3 np.hstack((a,b))[0] = 1004 np.hstack((a,b))[6] = 1005 print(a)6 print(b)
[0 1 2 3 4 5][ 6  7  8  9 10 11]

 

np.vsplit(ndarray a, b)将a对第一维进行拆分成b等份

np.hsplit(ndarray a, b)将a对第二维进行拆分成b等份

np.split(ndarray a, b, axis=0)将a对指定的维度进行拆分成b等份

np.array_split(ndarray a, b, axis=0)将a对指定的维度进行拆分成b份,允许不等分,此时会尽量均等,多出部分从前到后分配

1 a = np.arange(6).reshape((2,3))2 print(a)3 print(np.vsplit(a,2))4 print(np.hsplit(a,3))5 print(np.split(a,2,axis=0))6 print(np.split(a,3,axis=1))7 print(np.array_split(a,2,axis=1))
[[0 1 2] [3 4 5]][array([[0, 1, 2]]), array([[3, 4, 5]])][array([[0],       [3]]), array([[1],       [4]]), array([[2],       [5]])][array([[0, 1, 2]]), array([[3, 4, 5]])][array([[0],       [3]]), array([[1],       [4]]), array([[2],       [5]])][array([[0, 1],       [3, 4]]), array([[2],       [5]])]

 

np.empty_like( array x ):返回一个大小和类型与x相同的array,但其中内容并未初始化,可能为随机值

np.zeros_like( array x ):返回一个大小与x相同,但元素全为 0 的array

np.ones_like( array x ):返回一个大小与x相同,但元素全为 1 的array

 

np.tile( array x, tuple shape):返回一个大小为 x 的维分别于 shape 的维相乘的 array,即将 x copy了 shape遍。

 

 

 

转载于:https://www.cnblogs.com/cenariusxz/p/8859687.html

你可能感兴趣的文章
log4j.properties配置详解与实例
查看>>
Spring学习笔记:Spring概述,第一个IoC依赖注入案例
查看>>
let和var的区别
查看>>
《面向模式的软件体系结构1--模式系统》读书笔记(9)--- 模式系统
查看>>
2012年11月8日学习研究报告
查看>>
《黑客与画家》读后感
查看>>
jq中html(),text(),val()以及js中innerHTML,innerText和value
查看>>
**RESTful API版本控制策略
查看>>
win7更改配色方案介绍~
查看>>
CImageList用法介绍
查看>>
[LeetCode] 40. Combination Sum II
查看>>
1065. 单身狗(25)
查看>>
《程序员代码面试指南》第八章 数组和矩阵问题 未排序数组中累加和小于或等于给定值的最长子数组长度...
查看>>
23种设计模式
查看>>
ES6_入门(3)_顶层对象属性
查看>>
使用VNC(ubuntu 与 windows 互连 )
查看>>
Map和Stack的STL方法简介
查看>>
Tasks Queues and Cron Jobs(任务队列和时钟守护作业)
查看>>
BZOJ1070[SCOI2007]修车——最小费用最大流
查看>>
elasticsearch映射 mapping
查看>>