numpy学习笔记
目录
numpy的安装
pip install numpy
numpy 的属性:
-
ndim
:维度 -
shape
:行数和列数 -
size
:元素个数
import numpy as np #为了方便使用numpy 采用np简写
array = np.array([[1,2,3],[2,3,4]]) #列表转化为矩阵
print('number of dim:',array.ndim) # 维度
# number of dim: 2
print('shape :',array.shape) # 行数和列数
# shape : (2, 3)
print('size:',array.size) # 元素个数
# size: 6
Numpy 创建 array
-
array
:创建数组 -
dtype
:指定数据类型 -
zeros
:创建数据全为0 -
ones
:创建数据全为1 -
empty
:创建数据接近0 -
arrange
:按指定范围创建数据 -
linspace
:创建线段
a = np.array([2,23,4]) # list 1d
#指定数据 dtype
a = np.array([2,23,4],dtype=np.int)
a = np.array([2,23,4],dtype=np.int32)
a = np.array([2,23,4],dtype=np.float)
a = np.array([2,23,4],dtype=np.float32)
#创建特定数据
a = np.array([[2,23,4],[2,32,4]]) # 2d 矩阵 2行3列
#创建全零数组
a = np.zeros((3,4)) # 数据全为0,3行4列
#创建全一数组, 同时指定这些特定数据的 dtype:
a = np.ones((3,4),dtype = np.int) # 数据为1,3行4列
#创建全空数组:
a = np.empty((3,4)) # 数据为empty,3行4列
#用 arange 创建连续数组:
a = np.arange(10,20,2) # 10-19 的数据,2步长
#使用 reshape 改变数据的形状
a = np.arange(12).reshape((3,4)) # 3行4列,0到11
#用 linspace 创建线段型数据:
a = np.linspace(1,10,20) # 开始端1,结束端10,且分割成20个数据,生成线段
#同样也能进行 reshape 工作:
a = np.linspace(1,10,20).reshape((5,4)) # 更改shape
Numpy 基础运算
import numpy as np
########################一维矩阵#######################
a=np.array([10,20,30,40]) # array([10, 20, 30, 40])
b=np.arange(4) # array([0, 1, 2, 3])
c=a-b # array([10, 19, 28, 37])
c=a+b # array([10, 21, 32, 43])
c=a*b # array([ 0, 20, 60, 120])
#在Numpy中,想要求出矩阵中各个元素的乘方需要依赖双星符号 **,即:
c=b**2 # array([0, 1, 4, 9])
#当需要对矩阵中每一项元素进行函数运算时:
c=10*np.sin(a) # array([-5.44021111, 9.12945251, -9.88031624, 7.4511316 ])
#对print函数进行一些修改可以进行逻辑判断:
print(b<3) # array([ True, True, True, False], dtype=bool)
########################多维矩阵#######################
a=np.array([[1,1],[0,1]])
b=np.arange(4).reshape((2,2))
#对应元素相乘
c=a*b
#标准矩阵相乘
c_dot = np.dot(a,b)
c_dot_2 = a.dot(b)
#对矩阵中所有元素进行求和,寻找最小值,寻找最大值的操作:
np.sum(a)
np.min(a)
np.max(a)
#需要对行或者列进行查找运算,要在上述代码中为 axis 进行赋值。 当axis的值为0的时候,将会以列作为查找单元, 当axis的值为1的时候,将会以行作为查找单元。
print("sum =",np.sum(a,axis=1))
print("min =",np.min(a,axis=0))
print("max =",np.max(a,axis=1))
import numpy as np
A = np.arange(2,14).reshape((3,4))
# argmin() 和 argmax() 两个函数分别对应着求矩阵中最小元素和最大元素的索引。
print(np.argmin(A)) # 0
print(np.argmax(A)) # 11
#计算统计中的均值
print(np.mean(A)) # 7.5 mean()函数还有另外一种写法: print(A.mean())
print(np.average(A)) # 7.5
#求解中位数的函数:
print(A.median()) # 7.5
#累加函数
print(np.cumsum(A))
#累差函数
print(np.diff(A))
#对所有元素进行仿照列表一样的排序操作
print(np.sort(A))
#矩阵的转置两种表示方法:
print(np.transpose(A))
print(A.T)
Numpy 索引
一维索引
import numpy as np
A = np.arange(3,15) # array([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
print(A[3]) # 6
A = np.arange(3,15).reshape((3,4))
"""
array([[ 3, 4, 5, 6]
[ 7, 8, 9, 10]
[11, 12, 13, 14]])
"""
print(A[2])
# [11 12 13 14]
二维索引
print(A[1][1]) # 8
print(A[1, 1]) # 8
print(A[1, 1:3]) # [8 9]
for row in A:
print(row)
"""
[ 3, 4, 5, 6]
[ 7, 8, 9, 10]
[11, 12, 13, 14]
"""
for column in A.T:
print(column)
"""
[ 3, 7, 11]
[ 4, 8, 12]
[ 5, 9, 13]
[ 6, 10, 14]
"""
#flatten是一个展开性质的函数,将多维的矩阵进行展开成1行的数列
print(A.flatten()) # array([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
Numpy array 合并
import numpy as np
A = np.array([1,1,1])
B = np.array([2,2,2])
#上下合并:
print(np.vstack((A,B))) # vertical stack
"""
[[1,1,1]
[2,2,2]]
"""
#左右合并
D = np.hstack((A,B)) # horizontal stack
# [1,1,1,2,2,2]
Numpy array 分割
import numpy as np
A = np.arange(12).reshape((3, 4))
"""
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
"""
##############################对等分割################################
#纵向分割
print(np.split(A, 2, axis=1))
"""
[array([[0, 1],
[4, 5],
[8, 9]]),
array([[ 2, 3],
[ 6, 7],
[10, 11]])]
"""
#横向分割
print(np.split(A, 3, axis=0))
"""
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
"""
##############################不等量分割################################
print(np.array_split(A, 3, axis=1))
"""
[array([[0, 1],
[4, 5],
[8, 9]]),
array([[ 2],
[ 6],
[10]]),
array([[ 3],
[ 7],
[11]])]
"""
Numpy copy & deep copy
import numpy as np
a = np.arange(4)
# array([0, 1, 2, 3])
############################### = 的赋值方式会带有关联性 ##############################
b = a
c = a
d = b
#改变a的第一个值,b、c、d的第一个值也会同时改变。
a[0] = 11
print(a)
# array([11, 1, 2, 3])
#确认b、c、d是否与a相同。
b is a # True
c is a # True
d is a # True
#同样更改d的值,a、b、c也会改变。
d[1:3] = [22, 33] # array([11, 22, 33, 3])
print(a) # array([11, 22, 33, 3])
print(b) # array([11, 22, 33, 3])
print(c) # array([11, 22, 33, 3])
############################### copy() 的赋值方式没有关联性 ###############################
b = a.copy() # deep copy
print(b) # array([11, 22, 33, 3])
a[3] = 44
print(a) # array([11, 22, 33, 44])
print(b) # array([11, 22, 33, 3])