python:NumPy基础入门

文章参考 https://zhuanlan.zhihu.com/p/32242331,例子都是一个一个敲得,python3 莫得问题嘞呀

一、window 安装

pip install numpy 

切换清华下载源 ,scipy 以及matplotlib 可结合 numpy 实现更多计算以及绘图

pip3 install numpy scipy matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

测试安装

>>> from numpy import *
>>> eye(4)
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.]])

二、创建NumPy Ndarray 对象

array() 函数创建 Ndarray 对象

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
参数说明:

名称 描述

  • object 数组或嵌套的数列
  • dtype 数组元素的数据类型,可选
  • copy 对象是否需要复制,可选
  • order 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
  • subok 默认返回一个与基类类型一致的数组
  • ndmin 指定生成数组的最小维度
np.array([1, 2, 3, 4], ndmin=3) = [[[1 2 3 4]]]

三、矩阵合并

纵向合并 vstack

np.vstack((a,b)) 将 a, b 矩阵由原来两行两列,合并为四行两列

横向合并 hstack

np.hstack((a,b)) 将 a, b 矩阵由原来两行两列,合并为两行四列

concatenate 也可以矩阵合并

np.concatenate( (a1,a2), axis=0 ) 等价于 np.vstack( (a1,a2) )
np.concatenate( (a1,a2), axis=1 ) 等价于 np.hstack( (a1,a2) )

四、矩阵按条件截取

b = a[a>6] 返回结果为一维数组
a[a>6] = 0 将原矩阵中所有 大于6 的元素赋值为0

五、矩阵行列

a.shape 返回结果为含两个元素的元组 如:(2,5)及 2 行 5 列

六、函数生成矩阵

arange 和 range() 函数类似

a = np.arange(10) # 默认从0开始到10(不包括10),步长为1 返回 [0 1 2 3 4 5 6 7 8 9]

a2 = np.arange(5,20,2) # 从5开始到20(不包括20),步长为2,返回 [ 5 7 9 11 13 15 17 19]

linspace 等差数列

a = np.linspace(0,20,5) # 生成首位是0,末位是20,含5个数的等差数列 返回 [ 0. 5. 10. 15. 20.]

logspace 等比数列

logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None, axis=0):

num为数列个数默认50,base 为指数底数 默认10 及为公比

返回结果为 [ 1. 2. 4. 8. 16. 32.] 从 1 开始,2^5 结束,以公比为 2 开始递增, 总共 6 个数=
a = np.logspace(start=0, stop=5, num=6, base=2)

a = np.logspace(start=0, stop=0, num=6, base=5) # 返回结果为 [1, 1, 1, 1, 1, 1]

ones、zeros、eye、empty

ones创建全1矩阵 ,zeros创建全0矩阵 ,eye创建单位矩阵 ,empty创建空矩阵(实际有值)

a_empty = np.empty((2, 2)) # 创建2*2的空矩阵 返回[[0.33930547, 0.75305503],[0.77334359, 0.12428655]]

fromstring 将字符串转换矩阵

np.fromstring(‘abcdefg’, dtype=np.int8) # 返回结果为 [ 97 98 99 100 101 102 103]

random 随机数生成数组

np.floor(10*np.random.random((2, 5))) # 返回结果为 [[3., 6., 6., 6., 3.], [1., 5., 3., 3., 9.]]

fromfunction 根据矩阵行号列号生成矩阵

fromfunction(func,(5,6)) 第一个参数为 生成矩阵方法,第二个参数为矩阵大小

def func(i,j): 
    return i+j
a = np.fromfunction(func,(5,6)) 
# 返回
[[ 0.  1.  2.  3.  4.  5.]
 [ 1.  2.  3.  4.  5.  6.]
 [ 2.  3.  4.  5.  6.  7.]
 [ 3.  4.  5.  6.  7.  8.]
 [ 4.  5.  6.  7.  8.  9.]]

七、矩阵的运算

矩阵常规运算

需满足第一个矩阵的 列数 等于第二个矩阵行数

a = np.array([[4, 5, 6], [1, 2, 3]])
b = np.array([[6, 5, 4], [3, 2, 1]])
print(a*b)
"""
[[24 25 24]
 [ 3  4  3]]
"""
矩阵点乘
a1 = np.array([[1,2,3],[4,5,6]]) # a1为2*3矩阵
a2 = np.array([[1,2],[3,4],[5,6]]) # a2为3*2矩阵
print(a1.dot(a2))
"""
[[22 28]
 [49 64]]
"""

如下所示
在这里插入图片描述
矩阵乘和点乘是不同的,矩阵相乘适用于 行列相同的矩阵,对应位置相乘,而矩阵点乘适用于第一个矩阵的列数等于第二个矩阵的行数

注意:
矩阵乘积
设A为 m * p 的矩阵,B为 p* n 的矩阵,那么称 A * B 的矩阵C为矩阵A与B的乘积
哈达马积(Hadamard product)
设矩阵 A 和矩阵 B 都是 m*n 的矩阵,及行列相同,则称 A * B 的矩阵 C 为哈达马积
克罗内克积(Kronecker Product)
克罗内克积是两个任意大小的矩阵间的运算,符号记作⊗。克罗内克积也被称为直积或张量积

在这里插入图片描述

矩阵的转置 a.T
a = np.array([[1,2,3],
			  [4,5,6]])
print(a.T) # print(a.transpose())也可以转置
"""
[[1, 4],
 [2, 5],
 [3, 6]]
"""
逆矩阵

设A是一个n阶矩阵,若存在另一个n阶矩阵B,使得: AB=BA=E ,则称方阵A可逆,并称方阵B是A的逆矩阵

需要先导入numpy.linalg,用linalg的inv函数来求逆

import numpy.linalg
a1 = np.array([[2, 4, 4], [4, 8, 6], [2, 8, 4]])
print(numpy.linalg .inv(a1))
"""
可能会报 numpy.linalg.LinAlgError: Singular matrix,奇异矩阵,代表当前矩阵无逆矩阵
[[ 0.    0.5  -0.5 ]
 [-0.25  0.    0.25]
 [ 0.5  -0.25  0.  ]]
"""
矩阵信息获取
最值
a = np.array([[1,2,9],[4,5,0]])
print(a.max()) #获取整个矩阵的最大值 结果: 9
print(a.min()) #结果:0
print(a.max(axis=0)) # 获取每列最大值 [4,5,9]
print(a.max(axis=1))  # 获取每行最大值 [9,5]
# 要想获得最大最小值元素所在的位置,可以通过argmax函数来获得
print(a.argmax(axis=1))
# 结果为 [2 2]
平均值

mean() 函数,同样可以通过添加 axis 获取行列平均值
a.mean()、 a.mean(axis=0)、 a.mean(axis=1)

方差

var() 函数,同样可以添加 axis 获取行列方差
a.var()、 a.var(axis=0) 、 a.var(axis=1)

标准差

std()函数,同样可以添加 axis 获取行列标准差
a.std()、 a.std(axis=0)、 a.std(axis=1)

中值(中位数)

median(),同样可以添加 axis 获取行列中值
numpy.median(a)、 numpy.median(a, axis=1)、 numpy.median(a, axis=0):与其他写法不同

求和

sum()函数,同样可以添加 axis 获取行列和
a.sum()、 a.sum(axis=0)、 a.sum(axis=1)

累积和

cumsum()函数,同样可以添加 axis 获取行列累积和

a = np.array([[1,2,3],[4,5,6]])

print(a.cumsum())            # 对整个矩阵求累积和
# 结果 [ 1  3  6 10 15 21]
极差

ptp() 函数,同样可以添加 axis 获取行列极差
a.ptp()、 a.ptp(axis=0)、 a.ptp(axis=1)

八、NumPy IO

Numpy 可以读写磁盘上的文本数据或二进制数据。

NumPy 为 ndarray 对象引入了一个简单的文件格式:npy。

npy 文件用于存储重建 ndarray 所需的数据、图形、dtype 和其他信息。

常用的 IO 函数有:

load() 和 save()

load() 和 save() 函数是读写文件数组数据的两个主要函数,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为 .npy 的文件中。

np.save(file='outfile.npy', arr=[1, 2, 3, 4], allow_pickle=True, fix_imports=True)

print(np.load('outfile.npy'))
# 结果
"""
[1 2 3 4]
"""
savez()

savez() 函数用于将多个数组写入文件,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为 .npz 的文件中。

np.savez(file='outfile.npz', arr_0=[1, 2, 3], arr_1=[4, 5, 6], allow_pickle=True, fix_imports=True)

print(np.load('outfile.npz')['arr_0'])

"""
[1 2 3]
"""
loadtxt() 和 savetxt()

loadtxt() 和 savetxt() 函数处理正常的文本文件(.txt 等)

np.savetxt('out.txt',[1,2,3,4,5]) 

print(np.loadtxt('out.txt'))
# 结果
"""
[1 2 3 4 5]
"""
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值