【python VS vba】(7) python与numpy (建设ing)

目录

1 numpy 的基本介绍

2  numpy里的两种新数据类型:ndarray 和 matrix

2.1 numpy特殊的数据类型

2.1.1 python的数据类型

2.1.2 首先 python原生的list 和 tuple 

2.1.3 numpy的数据类型

2.2 np.matrix() 或者 np.mat()

2.2.1 首先,两种写法相同

2.2.2 np.matrix的特点

2.2.3 np.matrix的属性

2.3 np.matrix的方法

2.3.1 比如关于 .reshape()方法

2.3.2 其他方法

2.4 np.array 只是数组,本质也可以视为矩阵?

2.5  代码例子

2.6 两者矩阵的计算方式的差别

2.6.1 线性代数里的矩阵计算和 numpy里矩阵计算的区别

2.6.2 矩阵的+

2.6.3 矩阵的-

2.6.4 矩阵的*

2.6.5 矩阵的/

3 np.matrix的相关

3.1 两种写法

3.2 优点

3.2.1 求转置矩阵方便

3.2.2 求逆矩阵方便

3.2.3 求矩阵的秩方便

3.3 相关代码试验

4 np 与多项式

4.1 创建二项式公式

4.2 求函数的导函数

4.3 设置多项式的X轴和Y轴内容

4.4 利用matplotlib 打印 带坐标轴的函数图形

4.5 代码相关

5  创建数组的各种方法

5.0 总结

5.1 np.arrange()

5.2 np.linspace()

5.3 np.random.random


1 numpy 的基本介绍

2  numpy里的两种新数据类型:ndarray 和 matrix

2.1 numpy特殊的数据类型

2.1.1 python的数据类型

  • list=[]
  • tupe=()
  • dict={}

2.1.2 首先 python原生的list 和 tuple 

  • 就不是matrix
  • 因此就没有.shape属性
  • 也不能被  reshape()
  • 包括 .shape  .ndim  .size  .dtype  .itemsize 这些属性都没有

2.1.3 numpy的数据类型

  • ndarray,是用np.array() 创建的数据类型
  • matrix,是用np.matrix() 创建的数据类型
  • 这两种数据类型都是用来保存,矩阵/向量组的
  • 写入例如   
  • A=np.array([[1,2,3],[4,5,6]])
  • 注意矩阵里,多套[] 的嵌套

2.2 np.matrix() 或者 np.mat()

2.2.1 首先,两种写法相同

首先np.matrix()=np.mat()

2.2.2 np.matrix的特点

  • np.matrix 显然就是指矩阵,或向量组
  • np.matrix 甚至还可以是三维的,比如 np.mat([[1,2,3],[1,2,3]],[[1,2,3],[1,2,3]])
  • np.matrix 可以从字符串数据 / 或数字中创建矩阵
  • np.matrix() 无论是从字符串内容创建的,还是从数字创建的,没有区别
  • 对比下,np.array 只能是数字中创建数组

2.2.3 np.matrix的属性

  • np.matrix().shape        #n行m列,
  • np.matrix().ndim          #维度数,比如(2,3) 是2维的
  • np.matrix().size           #矩阵的元素个数=n*m
  • np.matrix().dtype         #矩阵元素的类型,而不是矩阵的类型
  • np.matrix().itemsize     #矩阵元素的大小

2.3 np.matrix的方法

2.3.1 比如关于 .reshape()方法

  • 只要修改合理,可以根据总元素数,随意修改元素的实际shape
  • 比如(12,) 修改为(3,4)  或(4,3)

2.3.2 其他方法

2.3.3 np.matrix() 可以把其他类型得数组/矩阵等,转化为矩阵

2.4 np.array 只是数组,本质也可以视为矩阵?

  • 和np.matrix的区别到底是?

2.5  代码例子

  • print(A)      #可直接打印矩阵内容
  • type(A)      #可获得变量类型
  • 只有 ndarray 和 matrix  才有 .shape 属性和使用 reshape()方法

import numpy as npmylist1=[1,2,3,4,5,6]
mytuple1=(1,2,3,4,5,6)
A1=np.mat("1,2,3;10,20,30")   #mat=matrix 可以从string里创建向量组
A=np.mat([[1,2,3],[10,20,30]])
B=np.matrix([[1,2,3],[10,20,30]])
C=np.array([[1,2,3],[10,20,30]])   #np.array()只能用数字创建向量组#py语法内容
print(f"mylist1:{type(mylist1)}\n{mylist1}")
print(f"mytuple1:{type(mytuple1)}\n{mytuple1}")#numpy 语法内容
print(f"A1:{type(A1)}维数={A1.shape}\n{A1}")
print(f"A:{type(A)}维数={A.shape}\n{A}")
print(f"B:{type(B)}维数={B.shape}\n{B}")
print(f"C:{type(C)}维数={C.shape}\n{C}")#测试 向量组/矩阵.属性 .shape#python里原生的list和tuple没有shape属性
#print(mylist1.shape)
#print(mytuple1.shape)# numpy里,numpy.matrix 和 numpy.ndarray 都是有维度的矩阵/向量组
print(A1.shape)
print(A.shape)
print(B.shape)
print(C.shape)#测试  矩阵/向量组的多个属性
print(A.ndim)    #几维
print(A.shape)   #n行m列?具体的维度数
print(A.size)    #总数量个数=n*m
#print(A.type)   #报错
print(A.dtype)   #描述数组元素类型,而不是数组整体的类型
print(A.itemsize) #数组每个元素的字节大小。比如一个数组的元素为float64,它的itemsize为8(=64/8)
print(A.data)     #?# 可被reshape的部分数组,向量,向量组,矩阵?
print(f"C可被变形为\n{C.reshape(3,2)}")
# py的原生类型list tuple无法使用reshape()方法
#print(f"mylist1可被变形为{mylist1.reshape(3,2)}")

2.6 两者矩阵的计算方式的差别

2.6.1 线性代数里的矩阵计算和 numpy里矩阵计算的区别

矩阵的+,- ,* ,/, 虽然从线性代数和numpy的计算是有区别的

  • 矩阵加法,线性代数=numpy
  • 矩阵减法,线性代数=numpy
  • 矩阵乘法
  1. 线性代数里包括很多,点乘,叉乘等等
  2. numpy里除了点乘,叉乘外,还包括对应位置元素的乘法?
  • 矩阵加法,线性代数=numpy
  1. 线性代数理论上没有矩阵除法
  2. numpy还包括对应位置元素的除法?

2.6.2 矩阵的+

  • 同型矩阵的对应元素直接相加

2.6.3 矩阵的-

  • 同型矩阵的对应元素直接相减

2.6.4 矩阵的*

  • 其实这个挺有问题的
  • 矩阵的乘法分为点乘--内积 和 叉乘--外积
  • 但是 numpy提供了一种同型矩阵对应元素相乘的算法

2.6.5 矩阵的/

  • 理论上,线性代数里并没有矩阵的除法吧
  • 而numpy提供了一种,两个同型矩阵,对应元素/的算法。。。。

3 np.matrix的相关

3.1 两种写法

  • np.matrix()=np.mat()

3.2 优点

3.2.1 求转置矩阵方便

  • 转置矩阵方法1:A.T
  • 转置矩阵方法1:np.transpose(A)

3.2.2 求逆矩阵方便

  • 逆矩阵方法1:A.I  (注意,ndarray是不能这样求逆矩阵的)
  • 逆矩阵方法2:

3.2.3 求矩阵的秩方便

  • 矩阵的秩方法1:np.linalg.matrix_rank(A))

3.3 相关代码试验

import numpy as npA=np.mat([[1,2,3],[10,20,30]])
print(A)
print(A.T)
print(A.I)
print("A的秩为:{}".format(np.linalg.matrix_rank(A)))
print()A=np.mat([[1,2,3],[10,20,30]])
print(A)
A=np.mat([[1,2,3],[10,20,30]])
print(A.T)
A=np.mat([[1,2,3],[10,20,30]])
print(A.I)
print()A=np.mat([[1,2,3],[10,20,30]])
print(A)
print(A.I)
print()

4 np 与多项式

  • numpy 可以支持多项式的计算
  • 配合  matplotlib 可以显示多项式的图形

4.1 创建二项式公式

#np与二项式
# y = 2x^2 + 4x + 8
arr = np.array([2, 4, 8])
func = np.poly1d(arr)

4.2 求函数的导函数

# m=1表示求一阶导数,依次类推
func1 = func.deriv(m=1)

4.3 设置多项式的X轴和Y轴内容

# 设置定义域-5,5;并将定义域等分了100份
x = np.linspace(-5, 5, 100)

y = func(x)
y1 = func1(x)

4.4 利用matplotlib 打印 带坐标轴的函数图形

  • # 绘制
    plt.plot(x, y, label="{}".format(func))
    plt.plot(x, y1, label="{}".format(func1))
  • plt.xlabel("x")
  • plt.legend()
  • plt.show()

# 绘制
plt.plot(x, y, label="{}".format(func))
plt.plot(x, y1, label="{}".format(func1))
plt.xlabel("x")
plt.ylabel("y")

# 显示图例
plt.legend()

# 显示图像
plt.show()

4.5 代码相关

import numpy as np
import matplotlib.pyplot as plt#np与二项式
# y = 2x^2 + 4x + 8
arr = np.array([2, 4, 8])
func = np.poly1d(arr)# m=1表示求一阶导数,依次类推
func1 = func.deriv(m=1)# 设置定义域-5,5;并将定义域等分了100份
x = np.linspace(-5, 5, 100)y = func(x)
y1 = func1(x)# 打印多项式
print(func)
# 打印多项式对应的一阶导数
print(func1)# 绘制
plt.plot(x, y, label="{}".format(func))
plt.plot(x, y1, label="{}".format(func1))
plt.xlabel("x")
plt.ylabel("y")# 显示图例
plt.legend()print("多项式的根:")
print(np.roots(func))# 显示图像
plt.show()



 

5  创建数组的各种方法

5.0 总结

  • 方法1,前面的几种手动方法
  • 方法2, reshape()
  • 方法3,

5.1 np.arrange()

np.arrange(1,10,1)

5.2 np.linspace()

  • np.linspace(10)
  • np.linspace(1,10)
  • np.linspace(1,10,50)

5.3 np.random.random

  • np.random.random(10)
  • 生成的都是[0,1)的数,数量为10个

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/203205.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于PicGo实现Typora图片自动上传GitHub

文章目录 一. 引言二. 原理三. 配置3.1 GitHub 设置3.2 下载配置 PicGo3.3 配置 Typora3.4 使用 一. 引言 Typora是一款非常好的笔记软件,但是有一个比较不好的地方:默认图片是存放在本地缓存中。这就会导致文件夹一旦被误删或电脑系统重装而忘记备份文件…

pymysql报错: unable to rollback、Already closed

参考: https://www.coder.work/article/4516746 https://www.cnblogs.com/leijiangtao/p/11882107.html https://stackoverflow.com/questions/55116007/pymysql-query-unable-to-rollback unable to rollback处理: # 关闭光标对象 cursor.close() # 关…

华为OD机试 - 执行任务赚积分(Java JS Python C)

题目描述 现有N个任务需要处理,同一时间只能处理一个任务,处理每个任务所需要的时间固定为1。 每个任务都有最晚处理时间限制和积分值,在最晚处理时间点之前处理完成任务才可获得对应的积分奖励。 可用于处理任务的时间有限,请问在有限的时间内,可获得的最多积分。 输入…

【Flink on k8s】- 8 - Flink kubernetes operator 的架构和设计

目录 1、整体介绍 2、架构体系 2.1 架构介绍 2.2 Control loop(控制循环)

18、XSS——cookie安全

文章目录 1、cookie重要字段2、子域cookie机制3、路径cookie机制4、HttpOnly Cookie机制5、Secure Cookie机制6、本地cookie与内存cookie7、本地存储方式 一般来说,同域内浏览器中发出的任何一个请求都会带上cookie,无论请求什么资源,请求时&…

西南科技大学C++程序设计实验六( 继承与派生一)

一、实验目的 1. 理解不同继承属性对派生类访问基类成员的区别 2. 掌握单继承程序编写 二、实验任务 1、调试下列程序,并在对程序进行修改后再调试,指出调试中的出错原因(该题中A为基类,B为派生类,B以public方式继承A) 重点:理解不同继承方式数据的访问权限,派生类…

.kann勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

导言: 在数字化的今天,.kann勒索病毒等数字威胁正日益猖狂,给个人和企业的数据安全带来了巨大威胁。本文将深入介绍.kann勒索病毒的特征,提供有效的数据恢复方法,并分享一些预防措施,助您更好地在数字世界…

Java利用TCP实现简单的双人聊天

一、创建新项目 首先创建一个新的项目,并命名为聊天。然后创建包,创建两个类,客户端(SocketClient)和服务器端(SocketServer) 二、实现代码 客户端代码: package 聊天; import ja…

Memory-augmented Deep Autoencoder for Unsupervised Anomaly Detection 论文阅读

Memorizing Normality to Detect Anomaly: Memory-augmented Deep Autoencoder for Unsupervised Anomaly Detection 摘要1.介绍2.相关工作异常检测Memory networks 3. Memory-augmented Autoencoder3.1概述3.2. Encoder and Decoder3.3. Memory Module with Attention-based S…

mysql知识分享(包含安装卸载)(一)

如果博客有错误,请佬指正。 目录 注意:打开cmd时要有管理员身份打开,重要 为何使用数据库? 数据库的相关概念 关系型数据库 关系型数据库设计规则 表,记录,字段 表的关联关系 一对一关联 一对多关系 …

2023-12-03-解决libxkbcommon库编译完后图像界面不能使用键盘

layout: post # 使用的布局(不需要改) title: Ubuntu修复 # 标题 subtitle: 解决libxkbcommon库编译完图形界面不能使用键盘 #副标题 date: 2023-12-03 # 时间 author: BY ThreeStones1029 # 作者 header-img: img/about_bg.jpg #这篇文章标题背景图片 c…

西南科技大学C++程序设计实验七(继承与派生二)

一、实验目的 1. 掌握多继承程序设计 2. 掌握虚基类编程 3. 拓展学习可视化程序设计中的继承与派生应用 二、实验任务 重点:掌握虚基类的定义与实现,拓展其功能。 阅读分析、完善程序。下面程序(1)与程序(2)分别是没有使用虚基类和使用虚基类的代码,其中A是最上层基…

【IC前端虚拟项目】git和svn项目托管平台的简单使用说明

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 代码托管在gitee平台上,进去后会看到文档目录“MVU芯片前端设计验证虚拟项目”和工程目录“mvu_prj”,可以通过git来下载工程: git clone gitgitee.com:gjm9999/ic_vi…

【二分答案法】寻找峰值

题目:162. 寻找峰值 - 力扣(LeetCode) 题目描述: 题目分析: (1)据题知,索引-1、索引n(n为数组长度)处的元素都默认为无穷小,我们可以在一开始特判…

ESP32 蓝牙音箱无法链接上电脑的解决:此项不起作用,请确保你的蓝牙设备仍可检测到

ESP32 被我加了放大器后通过A2DP链接手机播放一直正常,但是怎么都链接不到电脑,蓝牙设备可以被发现和配对,但是始终无法连接,显示: 此项不起作用,请确保你的蓝牙设备仍可检测到,然后再试一次 …

C++初学者线路图 23年12月

高精度计算 1. 高精度加减法 高精度加减法课程(12月1日~12月4日)高精度加减法配套程序(12月5日~12月6日) 2. 高精度乘法 高精度乘法课程(12月7日~12月10日)高精度乘法…

SLAM算法与工程实践——SLAM基本库的安装与使用(2):OpenCV库

SLAM算法与工程实践系列文章 下面是SLAM算法与工程实践系列文章的总链接,本人发表这个系列的文章链接均收录于此 SLAM算法与工程实践系列文章链接 下面是专栏地址: SLAM算法与工程实践系列专栏 文章目录 SLAM算法与工程实践系列文章SLAM算法与工程实践…

RabbitMQ创建新用户,并给用户添加角色和授权

一、进入容器 1.1 查看运行容器的详细信息 docker ps -a1.2 进入容器命令 docker exec -it 容器ID /bin/bash 或 docker exec -it 容器name bash 1.3 退出容器命令 exit 或者 CtrlQP 二、操作RabbitMQ 2.1 查看用户列表 注:先进入到容器内部 rabbitmqctl list_user…

SQL语言重温

数据库语言重温 笔记背景SQL教程一些最重要的 SQL 命令SQL WHERE 子句SQL AND & OR 运算符SQL ORDER BY 关键字 笔记背景 由于工作需要,现重温简单SQL语言,笔记记录如下。 SQL教程 SQL(Structured Query Language:结构化查询语言&…

代码随想Day29 | 491.递增子序列、46.全排列、47.全排列 II

491.递增子序列 本题和 90.子集II 非常像,但又很不一样,很容易掉坑里。 这道题需要考虑的点有: 如何去除同一层已经使用过某数的情况:需要在某一层使用哈希表,来记录状态,实现去重,因为题中规定…