numpy:科学计算库 矩阵运算

1、基本操作

1.1创建array(数组)-->模拟矩阵

import numpy as np
list1 = [1,2,3,4,5]
v = np.array(list1)

 这样我们就成功创建一个一维数组了!

注意列表与数组的区别 列表是有逗号的而数组是没有的 

那么大家有没有一个疑惑?那高维数组该怎么创建?其实很简单

m = np.array([list1,list1])
z = np.array([[list1,list1,list1]])

注意:这里小括号内的中括号以及逗号是无法省略的。

这样我们就成功创建了一个二维和三维数组,高维数组依次类推啦。

看一下z数组吧

1.2数组的基本操作

基本属性

v.shape
v.ndim
m.shape
m.ndim
z.shape
z.ndim

结果

(5,)
1
(2, 5)
2
(1, 3, 5)
3


升维

import numpy as np
list1 = [1,2,3,4,5,6,7,8]
v = np.array(list1)

#reshape
r1 = v.reshape(2,4)
#此处4的位置可以写为-1让计算机自己计算
r2 = v.reshape(2,2,2) #一维到三维
r3 = r1.reshape(1,2,4) #二维到三维

 结果 

r1:

[[1 2 3 4]
 [5 6 7 8]]

r2:

[[[1 2]
  [3 4]]

 [[5 6]
  [7 8]]]

r3:

[[[1 2 3 4]
  [5 6 7 8]]]

另一种方法

#resize 不返回计算结果 直接修改
v.resize(2,4)

结果

v:

[[1 2 3 4]
 [5 6 7 8]]

降维(转一维)

v = r2
r2 = v.ravel()
r3 = v.flatten()

结果

r2和r3一样

[1 2 3 4 5 6 7 8]

1.3创建特殊的数组

全为0的数组

np.zeros(5)
np.zeros((2,2))#高维同理

全为1的数组

np.ones(5)
np.ones((2,2))
np.ones(((2,2,2)))#高维同理

全为某个数字

np.full((3,4),2)#3行4列全为2

创建单位矩阵

单位矩阵就是对角线元素全为1的矩阵

但如果出现非方阵的情况怎么办呢

np.eye(5)
np.eye(5,7)

 这个就是非方阵的情况啦

1.4常用函数

np.arange(start,stop,step,dtype)

start:起始 可忽略不写 默认从0开始

stop:终止  不可忽略

step:步长 可忽略不写 默认步长为1

r3 = np.linspace(0, 1,10)

dtype: 默认为None 设置显示元素的数据类型

r1 = np.arange(2,10,2)#终点值为10,起点值为2,步长为2;
r2 = np.arange(0,9,1)#终点值为9,起点值为0,步长为1;

r1:[2 4 6 8]
r2:[0 1 2 3 4 5 6 7 8]

linspace(start,stop,nums)

star 和 stop 意思都同上 nums通俗一点来理解就是你需要几个点 

这三个参数缺一不可 [start,stop]

r3 = np.linspace(0, 1,10)

r3:
[0.         0.11111111 0.22222222 0.33333333 0.44444444 0.55555556
 0.66666667 0.77777778 0.88888889 1.        ]

1.5数组的组合

准备工作

import numpy as np
array1 = np.arange(9).reshape(3,3)
array2 = 2*array1
#指array1里每个元素变为原来的两倍后赋值=给array2

水平组合

r1 = np.hstack((array1,array1))
r2 = np.concatenate((array1,array2),axis = 1)
#注意(array1,array2) 的小括号!
-----------------------------------------------------------------------------------
result:

r1
>>array([[0, 1, 2, 0, 1, 2],
       [3, 4, 5, 3, 4, 5],
       [6, 7, 8, 6, 7, 8]])

r2
>>array([[ 0,  1,  2,  0,  2,  4],
       [ 3,  4,  5,  6,  8, 10],
       [ 6,  7,  8, 12, 14, 16]])

垂直组合 

r3 = np.vstack((array1,array1))
r4 = np.concatenate((array1,array2),axis = 0)
-----------------------------------------------------------------------------------
result:
r3
>>array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8],
       [0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

r4
>>array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 0,  2,  4],
       [ 6,  8, 10],
       [12, 14, 16]])

 1.6数组切割

准备工作

import numpy as np
array1 = np.arange(16).reshape(4,4)

>>array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

水平切割

r1 = np.hsplit(array1,1)
r2 = np.split(array1,2,axis = 1)

result:
r1
>>[array([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11],
        [12, 13, 14, 15]])]

r2
>>[array([[ 0,  1],
        [ 4,  5],
        [ 8,  9],
        [12, 13]]),
   array([[ 2,  3],
        [ 6,  7],
        [10, 11],
        [14, 15]])]

垂直切割

r3 = np.vsplit(array1,1)
r4 = np.split(array1,2,axis = 0)

result:
r3
>>[array([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11],
        [12, 13, 14, 15]])]

r4
>>[array([[0, 1, 2, 3],
        [4, 5, 6, 7]]),
 array([[ 8,  9, 10, 11],
        [12, 13, 14, 15]])]

1.7数组的运算

加减乘除都是在对应位置运算

import numpy as np
array1 = np.arange(16).reshape(4,4)
array2 = 2*array1

array1 + array2
>>array([[ 0,  3,  6,  9],
       [12, 15, 18, 21],
       [24, 27, 30, 33],
       [36, 39, 42, 45]])
array1-array2
>>array([[  0,  -1,  -2,  -3],
       [ -4,  -5,  -6,  -7],
       [ -8,  -9, -10, -11],
       [-12, -13, -14, -15]])

array1 *array2 
>>array([[  0,   2,   8,  18],
       [ 32,  50,  72,  98],
       [128, 162, 200, 242],
       [288, 338, 392, 450]])

1.8numpy的随机模块

randint:产生随机整数

返回一个随机整型数,[ , )

numpy.random.randint(low, high=None, size=None)

low: int 生成的数值最低要大于等于low。
(hign = None时,生成的数值要在[0, low)区间内)
high: int (可选)
如果使用这个值,则生成的数值在[low, high)区间。
size: int or tuple of ints(可选)
输出随机数的尺寸,比如size = (m * n* k)则输出同规模即m * n* k个随机数。默认是None的,仅仅返回满足要求的单一随机数。


np.random.randint(5)
>>4
np.random.randint(5,10)
>>5
np.random.randint(5,10,(2,3))
>>
array([[8, 9, 9],
       [9, 6, 5]])

rand:返回(0,1)之间随机浮点数

用于生成在[0, 1)区间内均匀分布的随机数,可以接受多个整数参数,用于指定生成数组的形状。

np.random.rand(5)#一维
>>array([0.66296071, 0.41581073, 0.60973892, 0.02437426, 0.39921265])

np.random.rand(3,4)#二维
>>array([[0.77292118, 0.06631582, 0.11259988, 0.95067329],
       [0.5838605 , 0.06931595, 0.95720012, 0.64767009],
       [0.89740892, 0.92919478, 0.8203114 , 0.74555259]])

normal:生成复合正正态分布的数据

np.random.normal(loc,scale,size)

loc:均值

scale:方差

size:为一个二元元组,如(2,1), 为返回的矩阵的size

np.random.normal(0,1,10)#均值为0,方差为1(正态分布),一维数组 有十个
>>array([ 0.94422401,  0.56711231, -1.15241544,  0.2371444 ,  0.42166489,
       -0.4684138 , -0.94660183,  1.20413158,  2.05810196, -1.5777759 ])

np.random.normal(10)#均值为10
>>9.340917150594466

1.9常见统计量

方差:array1.var()     和:array1.sum()
标准差:array1.std()   中值:np.median(array1)
均值:array1.mean()

1.10矩阵运算

矩阵乘法 a.dot(b)  np.dot(a,b)
矩阵求逆 np.linalg.inv(a)

 1.11函数 

类别    NumPy函数    Math模块函数    功能
数学常数    np.e    math.e    自然常数
数学常数    np.pi    math.pi    圆周率
舍入函数    np.ceil()    math.ceil()    进尾取整
舍入函数    np.floor()    math.floor()    去尾取整
舍入函数    np.around()        四舍五入到指定精度
舍入函数    np.rint()        四舍五入到最近整数
快速转换函数    np.deg2rad()、np.radians()    np.radians()    度转弧度
快速转换函数    np.rad2deg()、np.degrees()    math.degrees()    弧度转度
幂指数对数函数    np.hypot()    math.hypot()    计算直角三角形的斜边
幂指数对数函数    np.square()        平方
幂指数对数函数    np.sqrt()    math.sqrt()    开平方
幂指数对数函数    np.power()    math.pow()    幂
幂指数对数函数    np.exp()    math.exp()    指数
幂指数对数函数    np.log()、np.log10()、np.log2()    math.log()、math.log10()、math.log2()    对数
三角函数    np.sin()/arcsin()    math.sin()/asin()    正弦/反正弦
三角函数    np.cos()/arccos()    math.cos()/acos()    余弦/反余弦
三角函数    np.tan()/arctan()    math.tan()/atan()    正切/反正切
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/feizuiku0116/article/details/126705859

2.后话

希望大家可以一起讨论,学习和进步呀!

  • 24
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瓦伦丁的拐杖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值