numpy
命令行安装
conda create -n env_name list of packages
比如:conda create - py3 python3.8 pandas
-
进入环境
source activate env_name
-
退出环境
source deactivate
-
显示所有环境
conda env remove -n env_name
-
查看所有的安装包
conda list
-
查看python包
conda list python
conda search search search_term
-
更新命令
conda update
conda update python numpy
-
删除命令
conda remove
conda remove python scipy
numpy属性
导入numpy模块
import numpy as np
import numpy as np
#将列表转换为矩阵
array = np.array([[1,2,3],
[4,5,6]])
print(array)
print("number of dim:",array.ndim)#矩阵的维度
print("shape",array.shape)
print("size",array.size)
打印结果:
number of dim: 2
shape (2, 3) #2:表示行;3表示列
size 6 #6表示矩阵元素的个数
array属性
1.生成一个全部为零的矩阵
import numpy as np
a = np.zeros((3,4)) #(3,4)表示3行4列的矩阵
print(a)
a = npm.empty((3,4)) #生成一个几乎为零的矩阵,但是不是等于0
2.生成一个全部为1的矩阵
3.生成一个有序的矩阵
a = np.arange(10,20,2)#start=10,end=20,间隔为2 输出结果为10,12,14,16,18;不包括20
#定义成(3,4)3行4列
a = np.arange(12),reshape((3,4))
3.生成一个线段
a = np.linspace(1,10,5)#1~10;5个元素
a = np.linspace(1,10,6).reshape((2,3))#更改成2行3列
矩阵运算
减法
a = np.array([10,20,30,40])
b = np.arange(4) #定义一个1行4列的矩阵
#减
c = a - b
print(c)
#判断矩阵中哪些数是<3
print(b<3)
print(b==3)#判断哪些数是等于3
乘法
a = np.arange([[1,1],[0,1]])#2行2列的矩阵
b = np.arange(4).reshape((2,2))
#a的·幂
mi = a**2
#逐个相乘
c = a*b
#矩阵相乘
c_dot = np.dot(a,b)#或者
c_dot_ = a.dot(b)
最大值、求和、最小值
a = np.random.random((2,4))
np.sum(a)
np.min(a)
np.max(a)
#求某一行/维度的
np.sum(a,axis=0)
np.min(a,axis=1)#axis=1是表示每一行的最小值
np.max(a,axis=0)#axis=0表示每一列的最大值
最大值、最小值对应的索引
A = np.arange(2,14).reshape((3,4))
print(np.argmin(A))
print(np.argmax(A))
平均值
A = np.arange(2,14).reshape((3,4))
print(A.mean())#或者
print(np.mean(A))#average()也可以,但是老版本指令
中位数
A = np.arange(2,14).reshape((3,4))
print(np.median(A))
矩阵累加
A = np.arange(2,14).reshape((3,4))
print(np.cumsum(A))
运行结果:
#A举证
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
#cumsum()结果,累加的结果
[ 2 5 9 14 20 27 35 44 54 65 77 90]
#[ 2(2+1) 5(2+3) 9(2+3+4) 14 20 27 35 44 54 65 77 90]
矩阵累差
import numpy as np
A = np.arange(2,14).reshape((3,4))
print(A)
print(np.diff(A))#累差
运行结果:
#A矩阵
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
#np.diff(A)结果
[[1 1 1]
[1 1 1]
[1 1 1]]
#两两之间的差
分别求出非0的数对应的行和列
import numpy as np
A = np.arange(2,14).reshape((3,4))
print(A)
print(np.nonzero(A))
运行结果:
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
#对应的(0,0)(0,1)(0,2)等等
(array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64), array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))
逐行排序
import numpy as np
A = np.arange(14,2,-1).reshape((3,4))
print(A)
print(np.sort(A))
[[14 13 12 11]
[10 9 8 7]
[ 6 5 4 3]]
#结果
[[11 12 13 14]
[ 7 8 9 10]
[ 3 4 5 6]]
矩阵转置
import numpy as np
A = np.arange(14,2,-1).reshape((3,4))
print(A)
#第一种方式
print(A.T)
#第二种方式
print(np.transpose(A))
运行结果:
[[14 13 12 11]
[10 9 8 7]
[ 6 5 4 3]]
#A.T
[[14 10 6]
[13 9 5]
[12 8 4]
[11 7 3]]
#np.tanspose(A)
[[14 10 6]
[13 9 5]
[12 8 4]
[11 7 3]]
clip
import numpy as np
A = np.arange(14,2,-1).reshape((3,4))
print(A)
print(np.clip(A,5,9))#所有小于5的数都替换成5,所有大于9的数都替换成9,位于5~9之间的数不变
运行结果:
[[14 13 12 11]
[10 9 8 7]
[ 6 5 4 3]]
#结果
[[9 9 9 9]
[9 9 8 7]
[6 5 5 5]]
总结:np的数都可以指定行结算还是列计算,axis=0表示列计算,axis=1表示行计算;
矩阵索引
取值
A = np.arange(14,2,-1).reshape((3,4))
print(A[1][2])
print(A[1,1])
print(A[1,1:2])#1:2第二列到第三列
迭代
A = np.arange(3,15).reshape(3,4)
print(A)
print(A.flatten())
for item in A.flat:#迭代
print(item)
运行结果:
[[ 3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]]
[ 3 4 5 6 7 8 9 10 11 12 13 14]#A.flatten之后的结果
#A.flat是一个迭代器<numpy.flatiter object at 0x000002103D2C3720>
3
4
5
6
7
8
9
10
11
12
13
14
array合并
hstack和vstack
A = np.array([1,1,1])
B = np.array([2,2,2])
#上下合并
print(np.vstack(A,B)) #vertical stack
#左右合并
print(np.hstack(A,B)) #horizontal stack
#把行列表变成列的
print(A[:,np.newaxis])
运行结果:
[[1 1 1]
[2 2 2]]#vstack
[1 1 1 2 2 2]#hstack
#A[:,np.newaxis]之后
[[1]
[1]
[1]
[2]
[2]
[2]]
#纵向合并
[[1 2]
[1 2]
[1 2]]
concatenate
A = np.array([1,1,1])
B = np.array([2,2,2])
C = np.concatenate((A,B,A,B),axis=0)#a xis=0纵向
C = np.concatenate((A,B,A,B),axis=1)#axis=1横向
运行结果:
[[1]
[1]
[1]
[2]
[2]
[2]
[1]
[1]
[1]
[2]
[2]
[2]]
[[1 2 1 2]
[1 2 1 2]
[1 2 1 2]]
array的分割
等量分割
import numpy as np
A = np.arange(12),reshape((3,4))
print(A)
#方式1
print(np.split(A,2,axis=1))#axis=1纵向分割,2分成2块
print(np.split(A,3,axis=0))#axis=0横向分割,3分成3块
#方式2
print(np.vsplit(A,3))#上下分割成3份
print(np.hsplit(A,4))#左右分割成4份
运行结果:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
#vsplit和hsplit
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
[array([[0],
[4],
[8]]), array([[1],
[5],
[9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]])]
不等量分割
A = np.arange(12),reshape((3,4))
print(A)
print(np.array_split(A,3,axis=1))#axis=1纵向不等分割,2分成2块
运行结果:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[array([[0, 1],#不等量分割
[4, 5],
[8, 9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]])]
a = b
b = c
#a,b,c已经关联,如果a改变b,c也会改变
#a,b并不关联,改变b对a不影响
a = b.copy()#deep copy