IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Numpy库学习笔记2 -> 正文阅读

[Python知识库]Numpy库学习笔记2

广播原则
? ?

如果两个数组的后缘维度(即从末尾开始算起的维度)的轴长度相符或其中一方的长度为1,则认为他们是广播兼容的。
广播会在缺失和(或)长度为1的维度上进行。
? ??
例如:
shape为(3,4,2)的数组能和(4,3)的数组进行运算吗?
分析:不能,因为按照广播原则,从后面往前面数,(3,4,2)和(4,3)中的2和3不相等,所以不能进行运算。

shape为(3,4,2)的数组能和(4,1)的数组进行运算吗?
分析:能,因为按照广播原则,从后面往前面数,(3,8,2)和(8,1)中的2和1虽然不相等,但是因为有一方的长度为1,所以能参与运算。

import numpy as np

#数组与数的计算,相加,相减,相除类似
a1 = np.random.random((2,2))
print(a1)
# 如果想要在a1数组上所有元素都乘以100,那么可以通过以下来实现
a2 = a1*100
print(a2)
# 也可以使用round让所有的元素只保留2位小数
a3 = a2.round(2)

#数组与数组的计算:
#结构相同的数组之间的计算,直接运算
a1 = np.arange(0,12).reshape((3,4))
a2 = np.random.randint(1,10,size=(3,4))
a3 = a1 + a2     #相减/相除/相乘都可以
print(a1)
print(a2)
print(a3)

#与行数相同并且只有1列的数组之间的运算
a1 = np.random.randint(10,20,size=(3,4)) #3行8列
a2 = np.random.randint(1,10,size=(3,1)) #3行1列
a3 = a1 - a2 #行数相同,且a2只有1列,能互相运算,每一列对a2进行运算,即a1的每一列减去a2
print(a1)
print(a2)
print(a3)

#与列数相同并且只有1行的数组之间的运算:
a1 = np.random.randint(10,20,size=(3,4)) #3行4列
a2 = np.random.randint(1,10,size=(1,4))
a3 = a1+ a2   #每一行对a2进行运算,即a1的每一行加上a2
print(a1)
print(a2)
print(a3)

flatten和ravel方法:


? ? 两个方法都是将多维数组转换为一维数组,但是有以下不同:

? ? flatten是将数组转换为一维数组后,然后将这个拷贝返回回去,所以后续对这个返回值进行修改不会影响之前的数组。
? ? ravel是将数组转换为一维数组后,将这个视图(可以理解为引用)返回回去,所以后续对这个返回的值进行修改会影响之前的数组。

x = np.array([[1, 2],[2, 4]])
x.flatten()[1]=10   #未改变x
print(x)

x.ravel()[1]=100    #改变x
print(x)

数组的组合


? ? vstack:将数组按垂直方向进行叠加。数组的列数必须相同才能叠加。
? ? hstack:将数组按水平方向进行叠加。数组的行必须相同才能叠加。
? ? concatenate([],axis):将两个数组进行叠加,但是具体是按水平方向还是按垂直方向,则要看axis的参数。
? ? 如果axis=0,那么代表的是往垂直方向(行)叠加,如果axis=1,那么代表的是往水平方向(列)上叠加,
? ? 如果axis=None,那么会将两个数组组合成一个一维数组。
? ? 需要注意的是,如果往水平方向上叠加,那么行必须相同,如果是往垂直方向叠加,那么列必须相同。

#vstack
a1=np.random.randint(1,10,size=(3,5))
a2=np.random.randint(11,20,size=(1,5))
a3=np.vstack([a1,a2])
a3

#hstack
a1=np.random.randint(1,10,size=(3,2))
a2=np.random.randint(11,20,size=(3,1))
a3=np.hstack([a1,a2])
print(a1)
print(a2)
print(a3)

#concatenate([],axis),axis=0,往垂直方向叠加
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])
np.concatenate((a, b), axis=0)

#concatenate([],axis),axis=1往水平方向叠加
a = np.array([[1, 2, 3],[3, 4, 5]])
b = np.array([[5, 6],[7, 8]])
np.concatenate((a,b), axis=1)

数组的切割


? ? hsplit:按照水平方向进行切割。用于指定分割成几列,可以使用数字来代表分成几部分,也可以使用数组来代表分割的地方。
? ? vsplit:按照垂直方向进行切割。用于指定分割成几行,可以使用数字来代表分成几部分,也可以使用数组来代表分割的地方。
? ? split/array_split(array,indicate_or_seciont,axis):用于指定切割方式,
? ? 在切割的时候需要指定是按照行还是按照列,axis=1代表按照列,axis=0代表按照行。

a1 = np.arange(16).reshape(4, 4)

np.vsplit(a1,2)  #水平分割成两部分
np.vsplit(a1,[1,3])  #指定位置切割

np.hsplit(a1,2) 
np.hsplit(a1,[1,3])

np.split(a1,[1,3],axis=0)
np.split(a1,[1,3],axis=1)

数组(矩阵)转置和轴对换:

#转置
a1.T

#transpose,这个方法返回的是一个View,也即修改返回值,会影响到原来数组
a2=a1.T
a3=a2.transpose()
print(a2)
print(a3)

#算内积需要转置
print(a1.dot(a2))

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-17 15:21:33  更:2021-08-17 15:23:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:29:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码