numpy是Python中关于矩阵处理的模块
numpy的核心数据结构是array,是列表中嵌套列表的结构
创建向量、矩阵;查看shape,改变shape;取出某个数据
import numpy as np
vector = np.array([1, 2, 3, 4, 5])
matrix = np.array([[1, 2, 3, 4, 5], [2, 3, 4, 5, 6]]) #列表嵌套列表
print(type(vector), type(matrix))
print(vector.shape, matrix.shape)#(5,) (2, 5)
matrix = matrix.reshape(5, 2)
print(matrix.shape)
print(matrix)
print(vector[1], matrix[1, 1])#2 3
print(vector[0:3])#打印索引为0,1,2的值
import numpy as np
matrix = np.array([
[5, 10, 15],
[20, 25, 30],
[35, 40, 45]
])
print(matrix[:, 1])#第二列
print(matrix[:, 0:2])#前两列
print(matrix[1:3, 0:2])#后两行前两列
注意numpy的array内的数据必须是同一类型的,int都int,float就全部float,str就都str,否则会将所有的数据都变为同一类型
可以利用 数据.dtype 查看array内数据类型
import numpy as np
vector = np.array([1, 2, 3, 4, 5.00])
print(vector.dtype)
vector = np.array([1, 2, 3, 4, "5"])
print(vector.dtype)#<U11(numpy中<U11就表示str)
取出每一行的最大值
import numpy as np
a = np.floor(np.sin(np.random.random((4, 4)) * 10) * 10)
print(a)
ind = a.argmax(axis=0)#argmax函数可以取出最大数据的索引,axis=0代表按照列取值,axis=1代表按行取值
print(ind)
print(a[ind, range(0,4)])
#ind = a.argmax(axis=1)
#print(a[range(0,4), ind])
以True或False取值;&和|
import numpy as np
vector = np.array([1, 2, 3, 4, 5, 3, 3, 4, 5])
equal_to_ten = (vector == 3)
print(vector[equal_to_ten])
import numpy as np
vector = np.array([1, 2, 3, 4, 5, 3, 3, 4, 5, 6])
equal = (vector < 3) & (vector > 1)
equal1 = (vector > 5) | (vector < 2)
print(vector[equal])
print(vector[equal1])
类型转换
利用astype函数
import numpy as np
vector = np.array(["1", "2", "3"])
print(vector.dtype)
vector = vector.astype(float)
print(vector.dtype)
array的计算属性
import numpy as np
vector = np.array([5, 10, 15, 20])
print(vector.mean())
print(vector.max())
print(vector.min())
matrix = np.array([
[5, 10, 15],
[20, 25, 30],
[35, 40, 45]
])
print(matrix.sum(axis=0))#按列累加
print(matrix.sum(axis=1))#按行累加
array的其他属性
import numpy as np
vector = np.arange(12).reshape(3, 4)#用arange函数生成0-11的向量并转换为3行4列的矩阵(arange函数可以指定步长)
print(vector)
print(vector.ndim)#查看array的维度
print(vector.dtype.name)#查看array中数据类型的名字
print(vector.size)#查看array中数据个数
生成新的初始化矩阵
利用zeros函数或者ones函数
import numpy as np
zero_mat = np.zeros((3, 4))#注意zeros函数传入的也是一个元祖
print(zero_mat)
one_mat = np.ones((2, 3, 4), dtype=int)#生成两个三行四列的array,利用dtype指定数据类型为整型(默认为浮点型)
print(one_mat)
利用random模块生成
这种方法通常用在初始化权重矩阵时(高斯初始化、随机初始化)
import numpy as np
ran_mat = np.random.random((2, 3))#随机选择0-1之间的数生成两行三列的array
print(ran_mat)
linspace函数生成
linspace函数会在指定区间随机选取指定个数字
import numpy as np
ran_mat = np.linspace(0, 2 * np.pi, 10)#在0-2π之间随机选取10个数
print(ran_mat)
array之间的数学运算
array之间的+ - * /都是发生在对应位置之间的,array和数字之间的+ - * /对应在array的每一个位置
import numpy as np
a = np.arange(1, 5)
b = np.array([20, 30, 40, 50])
c = a + b
print(c)
print("****")
c = a - b
print(c)
c = a * b
print("****")
print(c)
c = b / a
print("****")
print(c)
print("------")
print(a + 1)
print(a - 1)
print(a * 2)
print(a / 2)
print(a ** 2)
print(np.exp(a))
print(np.sqrt(a))
矩阵相乘
import numpy as np
a = np.arange(1, 5).reshape((2,2))
b = np.array([10, 20, 30, 40]).reshape((2,2))
print(a)
print(b)
print("-----")
c = a.dot(b)
print(c)
c = np.dot(a, b)#另一种矩阵相乘的操作
print(c)
array的向下取整、拉成向量、转置、拼接、拆分、翻倍操作
利用floor函数向下取整
import numpy as np
a = np.floor(10 * np.random.random((3, 4)))
print(a)
矩阵转置
import numpy as np
a = np.floor(10 * np.random.random((3, 4)))
print(a)
print(a.T)
矩阵转换成向量
import numpy as np
a = np.floor(10 * np.random.random((3, 4)))
print(a)
print(a.ravel())
矩阵的拼接
垂直拼接
import numpy as np
a = np.array([
[1, 2],
[3, 4]
])
b = np.array([
[4, 5],
[6, 7]
])
c = np.vstack((a, b))
print(c)
水平拼接
import numpy as np
a = np.array([
[1, 2],
[3, 4]
])
b = np.array([
[4, 5],
[6, 7]
])
c = np.hstack((a, b))
print(c)
矩阵的拆分
垂直拆分
import numpy as np
a = np.floor(np.random.random((12, 2)) * 10)
print(a)
print(np.vsplit(a,3))#垂直方向平均拆分成3个array
水平拆分
import numpy as np
a = np.floor(np.random.random((2, 12)) * 10)
print(a)
print(np.hsplit(a,3))#水平方向平均拆分成3个array
按指定拆分
import numpy as np
a = np.floor(np.random.random((2, 12)) * 10)
print(a)
print(np.hsplit(a, (3,4)))#在第三列和第四列之后拆分array
数据翻倍
利用tile函数
import numpy as np
a = np.zeros((3, 4))
print(a)
a = np.tile(a, (2, 1))#将行变成两倍,列变成一倍
print(a)
按照数据大小给array排序
使用sort函数直接排序
import numpy as np
a = np.array([
[1, 2, 3],
[2, 1, 4]
])
b = np.sort(a, axis=0)#按列
print(b)
a.sort(axis=1)#按行
print(a)
#两种方法都可以
使用得出索引的方法排序
import numpy as np
a = np.array(
[4, 2, 3]
)
b = a.argsort(axis=0)
print(b)#[1 2 0] 表示第一个数放索引为1的元素,第二个数放索引为2的元素,第三个数放索引为0的元素
print(a[b])