Numpy模块

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])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值