NumPy 基本语法汇总
NumPy 数据结构属性以及数组创建
Numpy
是Python
科学计算库,用于快速处理任意维度的数组,可以处理N维数组, 支持向量化运算,其底层是由C语言编写的,运算速度相比较PYTHON会非常快, 这也是大数据常用numpy来计算的原因,其对数组的操作速度不受python解释器的影响。
----首先先试一下用numpy和python实现1+2+3+......+1亿的运算时间----
8
import numpy as np import time arr = np.arange(100000000) print('*'*30) %time np.sum(arr) print('*'*30) %time sum(arr)
****************************** Wall time: 39.9 ms ****************************** Wall time: 9.37 s
<timed eval>:1: RuntimeWarning: overflow encountered in long_scalars
8
887459712
1、 ndarray属性
属性 | 描述 |
---|---|
ndarray.shape | 数组维度的元组 |
ndarray.ndim | 数组维数 |
ndarray.size | 数组中的元素数量 |
ndarray.itemsize | 一个数组元素的长度(字节) |
ndarray.dtype | 数组元素的类型 |
9
import numpy as np a = np.array([1,2,3]) b = np.array([[1,2,3],[4,5,6]]) c = np.array([[[1,2],[3,4]], [[5,6],[7,8]]]) print('*'*30) print('a的数据维度是:',a.shape) #数组的维度的元组,当数组是一维时候,表示有几列 print('b的数据维度是:',b.shape) #两行三列 print('c的数据维度是:',c.shape) #三行三列 print('上面三个数组的维度分别是:',a.ndim,b.ndim,c.ndim) print('上面三个数组的元素个数分别是:',a.size,b.size,c.size) print(c.dtype) #数组的类型
****************************** a的数据维度是: (3,) b的数据维度是: (2, 3) c的数据维度是: (2, 2, 2) 上面三个数组的维度分别是: 1 2 3 上面三个数组的元素个数分别是: 3 6 8 int32
2、ndarray元素数据类型
ndarray.dtype
查看数组元素的数据类型,NumPy
支持比Python
更多的数值类型,得益于它本身还是有C语言编写。
数据类型 | 描述 | 唯一标识符 |
---|---|---|
bool | 用一个字节存储的布尔类型(True或False) | 'b' |
int8 | 一个字节大小,-128 至 127 | 'i' |
int16 | 整数,16 位整数(-32768 ~ 32767) | 'i2' |
int32 | 整数,32 位整数(-2147483648 ~ 2147483647) | 'i4' |
int64 | 整数,64 位整数(-9223372036854775808 ~ 9223372036854775807) | 'i8' |
uint8 | 无符号整数,0 至 255 | 'u' |
uint16 | 无符号整数,0 至 65535 | 'u2' |
uint32 | 无符号整数,0 至 2 ** 32 - 1 | 'u4' |
uint64 | 无符号整数,0 至 2 ** 64 - 1 | 'u8' |
float16 | 半精度浮点数:16位,正负号1位,指数5位,精度10位 | 'f2' |
float32 | 单精度浮点数:32位,正负号1位,指数8位,精度23位 | 'f4' |
float64 | 双精度浮点数:64位,正负号1位,指数11位,精度52位 | 'f8' |
complex64 | 复数,分别用两个32位浮点数表示实部和虚部 | 'c8' |
complex128 | 复数,分别用两个64位浮点数表示实部和虚部 | 'c16' |
object_ | python对象 | 'O' |
string_ | 字符串 | 'S' |
unicode_ | unicode类型 | 'U' |
3、ndarray创建结构化数据类型
10
import numpy as np dt = np.dtype([('name','S20'), ('price', 'f4'), ('weight', 'i1')]) nd = np.array([('meat', 15.6, 2),('apple', 6, 2)],dtype=dt) print(nd)
[(b'meat', 15.6, 2) (b'apple', 6. , 2)]
4、ndarray数组的创建
- 从其他Python结构转换(例如:列表,元组)使用
array
(深拷贝),asarray
(浅拷贝)方法 - 内在的numpy数组创建对象arange,zeros,ones......等
- 通过使用字符串或缓冲区从原始字节创建数组
- 使用特殊库函数random,
11
#从python列表结构转换, import numpy as np a = [1,2,3,4,5,6] print(np.array(a))
[1 2 3 4 5 6]
12
#内在的numpy数组创建对象arange,np.arange(start,stop,step,dtype) import numpy as np a = np.arange(10) b = np.zeros(10) c = np.ones(10) d = np.full((3,2),7)#构造3行两列的数组,指定填充数为7 print(a,b,c,d,sep='\n**************\n')
[0 1 2 3 4 5 6 7 8 9] ************** [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] ************** [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] ************** [[7 7] [7 7] [7 7]]
13
#使用特殊库函数random(重要)根据给定的维度生成**[0, 1)**之间的随机数 import numpy as np a = np.random.random() #创建一个随机数0-1之间 b = np.random.random(10) #创建一个一维的列表数组,0-1之间 c = np.random.random((5,2)) #创建一个二维数组10行2列,0-1之间 print(a,b,c,sep='\n**************\n')
0.9138248243834629 ************** [0.22414865 0.29108704 0.95452629 0.66855175 0.00150192 0.51841556 0.50442709 0.74724399 0.00856524 0.3938695 ] ************** [[0.32686679 0.14522227] [0.26809541 0.85052332] [0.53518224 0.62633159] [0.31946848 0.1022813 ] [0.70060205 0.31761763]]
14
#特殊函数ramdom的补充,randint #np.random.randint(low,high=None,size=None,dtype='l')`:生成取值区间为[low, high)的随机整数,size:数组维度大小,dtype:np.int a = np.random.randint(3,size=3) #生成3个[0,3)之间的整数 b = np.random.randint(3,5) #size=None,生成一个[1,5)之间随机的一个整数 c = np.random.randint(1,5,size=(3,2)) #生成一个二维数组 print(a,b,c,sep='\n**************\n')
[0 0 0] ************** 3 ************** [[3 4] [1 1] [2 4]]
志同道合一起学习,欢迎加入QQ群:878749917