引入NumPy模块

import numpy as np    #将numpy重新命名为np

多维数组的创建

一维数组创建

In : np.array([1,2,3,4,5,6]) #创建元素为[1,2,3,4,5,6]的一维数组,其类型为整型'int32'
Out: array([1, 2, 3, 4, 5, 6])

In : np.arange(1, 10, 2) 
#.arange(起始数字, 结束数字(实际循环的是结束数字-1),【跳数】)
#创建元素从1到9,并且跳数为2的一维数组,其类型为整型'int32'
Out : array([1, 3, 5, 7, 9])

注意:arange函数只可以创建一维数组

二维数组创建

In : np.array([[1,2,3],[4,5,6]]) #创建2行3列元素为[[1,2,3],[4,5,6]]的二维数组,其类型为整型'int32
Out: 
array([[1, 2, 3],
       [4, 5, 6]])

特定函数创建数组

创建全是零的二维数组 .zeros((行数,列数) ) 或 创建全是零的一维数组 .zeros(个数)

In : np.zeros(8)  #创建8个全是零的一维数组,其类型为浮点型'float64'
Out : array([0., 0., 0., 0., 0., 0., 0., 0.])

In : np.zeros((2,3))  #创建2行3列全是零的二维数组,其类型为浮点型'float64'
Out : 
array([[0., 0., 0.],
       [0., 0., 0.]])

创建全是一的二维数组 .ones(( 行数 ,列数 )) 或 创建全是一零的一维数组 .ones(个数)

In : np.ones(8)
Out : array([1., 1., 1., 1., 1., 1., 1., 1.])

In : np.ones((2,3))  #创建2行3列全是一的二维数组,其类型为浮点型'float64'
Out : 
array([[1., 1., 1.],
       [1., 1., 1.]])

创建空数组的二维数组 .empty(( 行数 , 列数 )) 或 创建空数组的二维数组 .empty(个数)

In : np.empty(4)
Out : array([7.74860416e-304, 7.74860419e-304, 7.74860419e-304, 7.74860419e-304])

In : np.empty((3,3)) #创建3行3列全是空值的二维数组,其中的值都为系统内脏值,其类型为浮点型'float64'
Out : 
array([[6.23042070e-307, 7.56587584e-307, 1.37961302e-306],
       [6.23053614e-307, 6.23053954e-307, 1.20160711e-306],
       [1.42410974e-306, 2.22522596e-306, 3.91786943e-317]])

学习已经出现的数组维度:.ones_like( 学习的数组 ).empty_like( 学习的数组 ).zeros_like( 学习的数组 )

In : a1 = np.array([[1,2,3],[4,5,6],[1,2,3]])
In : a1
Out : 
array([[1, 2, 3],
       [4, 5, 6],
       [1, 2, 3]])
In : np.ones_like(a1)
Out : 
array([[1, 1, 1],
       [1, 1, 1],
       [1, 1, 1]])
       
In : np.empty_like(a1)
Out : 
array([[ 890806488,        626, -734490714],
       [-629125869,  943353072,        626],
       [-114974809,  282148543,  976989600]])

In : np.zeros_like(a1)
Out : 
array([[0, 0, 0],
       [0, 0, 0],
       [0, 0, 0]])

构造单位矩阵:.eye( 行数,列数,k=对角元素的索引,dtype=元素类型 ) 可创建矩形矩阵.identity( 行数,dtype=元素类型 ) 只能创建方形矩阵

In : np.eye(4)
Out : 
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.]])
       
In : np.eye(3,5,k=1,dtype=int)
Out : 
array([[0, 1, 0, 0, 0],
       [0, 0, 1, 0, 0],
       [0, 0, 0, 1, 0]])
       
In : np.identity(3)
Out : 
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])
       
In : np.identity(3,dtype=int)
Out : 
array([[1, 0, 0],
       [0, 1, 0],
       [0, 0, 1]])

多维数组的常用属性

查看数组中元素的数据类型:.dtype

In : a1=np.arange(1,11)
In : a1.dtype
Out : dtype('int32')

获取元素的个数:.size

In : a1=np.arange(1,11)
In : a1.size
Out : 10

查看元素字节大小:.itemsize

In : a1=np.arange(1,11)
In : a1.itemsize
Out[30]: 4

获取数组的维数:.ndim

In : a1=np.arange(1,11)
In : a1.ndim
Out : 1

In : a2 = np.array([[1,2,3],[4,5,6],[1,2,3]])
In : a2.ndim
Out : 2

获取每个维度上元素的行和列数:.shape

In : a1=np.arange(1,11)
In : a1.shape
Out[31]: (10,)

In : a2 = np.array([[1,2,3],[4,5,6],[1,2,3]])
In : a2.shape
Out : (3, 3)


数组重塑操作:.reshape

In : a=np.arange(1,13)
Out : array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])
In : a.reshape(3,4)
Out : 
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])


In : a4=np.array((4,5,6,1,1,1,0,0,0)).reshape(3,3)
In : a4
Out : 
array([[4, 5, 6],
       [1, 1, 1],
       [0, 0, 0]])
In : a4=a4.reshape(1,9)
In : a4
Out : array([[4, 5, 6, 1, 1, 1, 0, 0, 0]])

数组合并操作:.concatenate([arr1, arr2],axis=1或0)、.vstack():在0轴/行合并、.hstack():在1轴/列合并

In : arr1 = np.arange(8).reshape(2,4)
In : arr2 = np.arange(1,13).reshape(3,4)
In : arr1
Out : 
array([[0, 1, 2, 3],
       [4, 5, 6, 7]])
In : arr2
Out : 
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])

In : np.concatenate([arr1, arr2])
Out : 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])


In : np.concatenate([arr1, arr2],axis=0)  #行合并
Out : 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])
       
In : a=np.vstack([arr1,arr2]) #行合并
In : a
Out : 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])


In : arr1 = np.arange(8).reshape(2,4)
In : arr1
Out : 
array([[0, 1, 2, 3],
       [4, 5, 6, 7]])
In : arr3 = np.arange(1,9).reshape(2,4)
In : arr3
Out : 
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])
In : np.concatenate([arr1, arr3],axis=1) #列合并
Out : 
array([[0, 1, 2, 3, 1, 2, 3, 4],
       [4, 5, 6, 7, 5, 6, 7, 8]])
       
In : a2=np.hstack([arr1,arr3]) #列合并
In : a2
Out : 
array([[0, 1, 2, 3, 1, 2, 3, 4],
       [4, 5, 6, 7, 5, 6, 7, 8]])

数组拆分:.split()

In : arr=np.arange(1,20)
In : arr
Out : 
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,
       18, 19])
       
In : np.split(arr,[5,10])    #在5断开了一下,又在10断开了一下
Out : 
[array([1, 2, 3, 4, 5]),
 array([ 6,  7,  8,  9, 10]),
 array([11, 12, 13, 14, 15, 16, 17, 18, 19])]

数组置换:.T

In : a = np.array([[1,2,3],
     [1,2,5],
     [4,6,7]])  
In : a.T
Out[12]: 
array([[1, 1, 4],
       [2, 2, 6],
       [3, 5, 7]])

numpy模块的随机函数:numpy.random.函数名()

生成[a,b]区间内的随机整数:numpy.random.randint(low , high )

In : np.random.randint(3,10)
Out : 4

np.random.randint(3,40,size=(3,3))
Out : 
array([[24, 26, 30],
       [ 4, 22, 19],
       [32, 10, 11]])

生成a行b列符合正态分布的数组元素:numpy.random.randn(行, 列)

In : a1=np.random.randn(3,3)
In : a1
Out : 
array([[-1.47626939,  1.53729025,  0.6441585 ],
       [ 0.54523365,  0.66979023, -1.06014085],
       [-0.45790031, -1.5220013 ,  2.03525964]])

生成符合泊松分布的数组元素:numpy.random.poisson(p,size)

In : np.random.poisson(1,5)
Out[22]: array([3, 3, 2, 0, 1])

正态分布:numpy.random.normal(loc, scale,size)

参数loc(float):正态分布的均值,对应着这个分布的中心。loc=0说明这一个以Y轴为对称轴的正态分布,
参数scale(float):正态分布的标准差,对应分布的宽度,scale越大,正态分布的曲线越矮胖,scale越小,曲线越高瘦。
参数size(int 或者整数元组):输出的值赋在shape里,默认为None。

以num作为随机种子,生成伪随机数:numpy.random.seed(num)

洗牌函数:numpy.random.shuffle()

多维数组的索引和切片

numpy切片

In : arr = np.arange(10)
In : arr
Out : array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In : arr1 = arr[-3:-1]
In : arr1
Out : array([7, 8])
In : arr1[:]   #全切
Out : array([7, 8])


numpy切片更改元素值与普通数组更改元素值不同

numpy更改元素的值

In : m=np.zeros(10,dtype=int)
In : m
Out : array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
In : n=m[:]  #n等于m的全切
In : n
Out : array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
In : n[0]=100  #将n的第0个元素赋值为100
In : n   #查看n元素,发现第0个值被更改了
Out[83]: array([100,   0,   0,   0,   0,   0,   0,   0,   0,   0])
In : m  #查看n元素,发现第0个值也被更改了
Out : array([100,   0,   0,   0,   0,   0,   0,   0,   0,   0])




数组更改元素的值

In : f=[1,1,1,1,1,1,1]
In : f
Out : [1, 1, 1, 1, 1, 1, 1]
In : t=f[:]   #t等于f的全切
In : t
Out : [1, 1, 1, 1, 1, 1, 1]
In : t[0]=100  #将t的第0个元素赋值为100
In : t  #查看t元素,发现第0个值被更改了
Out : [100, 1, 1, 1, 1, 1, 1]
In : f  #查看f元素,发现第0个值没被更改
Out : [1, 1, 1, 1, 1, 1, 1]

多维数组的基本运算

In : y = np.arange(10)
In : x = np.arange(1,11)
In : y
Out : array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In : x
Out : array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])

开方

In : y**2
Out : array([ 0,  1,  4,  9, 16, 25, 36, 49, 64, 81], dtype=int32)

相乘

In : x*y
Out : array([ 0,  2,  6, 12, 20, 30, 42, 56, 72, 90])

绝对值

In : np.abs(x)
Out[106]: array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])

平方

In : np.square(x)
Out : array([  1,   4,   9,  16,  25,  36,  49,  64,  81, 100], dtype=int32)

开平方根

In : np.sqrt(x)
Out : 
array([1.        , 1.41421356, 1.73205081, 2.        , 2.23606798,
       2.44948974, 2.64575131, 2.82842712, 3.        , 3.16227766])

条件逻辑运算

python条件运算表达式:x if 条件 else y

In : result = 1 if 2 > 3 else 0  #成立输出1,否则输出0
In : result
Out : 0
In : result = 1 if 2 > 1 else 0
In : result
Out : 1

.where(条件,成立结果,不成立结果):

In : arr1 = np.array([1,2,3,4])
In : arr2 = np.array([5,6,7,8])
In : cond = np.array([True, False, False, True])
In : result = np.where(cond, arr1, arr2) 
In : result
Out: array([1, 6, 7, 4])

数组求和:.sum():

In :  arr1 = np.arange(9).reshape(3,3)
In :  arr1
Out : 
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
       
In :  arr1.sum()   #全部求和
Out : 36

In :  arr1.sum(axis=0)   #列项求和
Out : array([ 9, 12, 15])

In :  arr1.sum(axis=1)   #行项求和
Out : array([ 3, 12, 21])


均值:.mean():

In : arr1 = np.arange(5)
In : arr1
Out : array([0, 1, 2, 3, 4])

In : arr1.mean()
Out : 2.0

方差的平方根:.std();

In : arr1 = np.arange(5)
In : arr1
Out : array([0, 1, 2, 3, 4])

In : arr1.std()
Out : 1.4142135623730951
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐