NumPy 基本语法汇总

 

NumPy 数据结构属性以及数组创建

NumpyPython科学计算库,用于快速处理任意维度的数组,可以处理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数组的创建

  1. 从其他Python结构转换(例如:列表,元组)使用array(深拷贝),asarray(浅拷贝)方法
  2. 内在的numpy数组创建对象arange,zeros,ones......等
  3. 通过使用字符串或缓冲区从原始字节创建数组
  4. 使用特殊库函数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]]

 

posted @ 2021-09-22 14:52  故笺笺  阅读(184)  评论(0编辑  收藏  举报