天天看点

numpy基础知识&安装numpy

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