广告
返回顶部
首页 > 资讯 > 后端开发 > Python >NumPy 学习笔记(三)
  • 735
分享到

NumPy 学习笔记(三)

学习笔记NumPy 2023-01-31 00:01:50 735人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

NumPy 数组操作:   1、修改数组形状     a、numpy.reshape(arr, newshape, order='C') 在不改变数据的条件下修改形状     b、numpy.ndarray.flat 是一个数组元素迭代器

NumPy 数组操作:

  1、修改数组形状

    a、numpy.reshape(arr, newshape, order='C') 在不改变数据的条件下修改形状

    b、numpy.ndarray.flat 是一个数组元素迭代器

    c、numpy.ndarray.flatten(self, order) 返回一份数组拷贝,对拷贝数组修改不会影响原数组

    d、numpy.ravel(a, order='C') 展开数组元素,顺序通常是 "C 风格",返回的是数组视图,即修改会影响原始数组

import numpy as np

# 将 1 维数组改变为形状为 2*5 的数组
arr = np.arange(10).reshape(2, 5)
print("arr: ", arr)

for elem in arr.flat:
    elem = elem + 1
    print(elem, end=" ")        # 1 2...10
# 原数组未改变!!!
print("\narr: ", arr)

arr.shape = (5, 2)
# [0 1 2 3 4 5 6 7 8 9]
print("Order is C: ", arr.flatten())
# [0 2 4 6 8 1 3 5 7 9]
print("Order is F: ", arr.flatten(order="F"))

temp = arr.ravel()
print("arr: ", temp)
# 修改了展开数组下标为 2 的元素
arr.ravel()[2] = 10
print("arr: ", arr)     # arr 发生改变

 

  2、翻转数组

    a、numpy.transpose(arr, axes) 用于对换数组的维度

    b、numpy.ndarray.T 类似 numpy.transpose()

    c、numpy.rollaxis(arr, axis, start) 向后滚动特定的轴到一个特定位置

    d、numpy.swapaxes(arr, axis1, axis2) 用于交换数组的两个轴

import numpy as np

# numpy.transpose(arr, axes) 用于对换数组的维度
arr = np.arange(1, 11).reshape(5, 2)
print("transpose arr: ", np.transpose(arr))
# numpy.ndarray.T 类似 numpy.transpose()
print("arr.T: ", arr.T)

# numpy.rollaxis(arr, axis, start) 向后滚动特定的轴到一个特定位置
arr = np.arange(4).reshape(2, 2)
print("rollaxis arr: ", np.rollaxis(arr, axis=1))       # [[0 2] [1 3]]
# numpy.swapaxes(arr, axis1, axis2) 用于交换数组的两个轴
print("swapaxes arr: ", np.swapaxes(arr, 1, 0))     # [[0 2] [1 3]]

 

  3、修改数组维度

    a、numpy.broadcast 用于模仿广播的对象,它返回一个对象,该对象封装了将一个数组广播到另一个数组的结果

    b、numpy.broadcast_to(array, shape, subok=False) 函数将数组广播到新形状。它在原始数组上返回只读视图,通常不连续。 如果新形状不符合 NumPy 的广播规则,该函数可能会抛出ValueError

    c、numpy.expand_dims(arr, axis) 通过在指定位置插入新的轴来扩展数组形状

    d、numpy.squeeze(arr, axis) 从给定数组的形状中删除一维的条目

import numpy as np

# numpy.broadcast 用于模仿广播的对象,它返回一个对象,该对象封装了将一个数组广播到另一个数组的结果
x = np.array([[1], [2], [3]])
y = np.array([4, 5, 6])
# 它拥有 iterator 属性,基于自身组件的迭代器元组
# 发生广播,[(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]
b = np.broadcast(x, y)
c = np.empty(b.shape)       # 生成形状如 b 的随机数组

print(c.shape)
print('手动使用 broadcast 将 x 与 y 相加:')
c.flat = [u + v for (u, v) in b]
print("x+y: ", c)
# 若把下面 b 的代码注释掉时输出空列表,以为迭代器指向末尾
b = np.broadcast(x, y)
lst = [o for o in b]
print("lst: ", lst)

# numpy.broadcast_to(array, shape, subok) 将数组广播到新形状。它在原始数组上返回只读视图,通常不连续
a = np.array([[1], [2], [3]])
b = np.broadcast_to(a, (3, 2))      # [[1 1] [2 2] [3 3]]
print("b: ", b)

# numpy.expand_dims(arr, axis) 通过在指定位置插入新的轴来扩展数组形状
a = np.array([[1, 2], [3, 4]])
print("shape of a: ", a.shape)      # (2, 2)
# 可以将 axis 看成数组形状元组的下标,在对应下标插入新轴
b = np.expand_dims(a, axis=0)
print("b: ", b)     # [[[1 2] [3 4]]]
print("shape of b: ", b.shape)      # (1, 2, 2)

b = np.expand_dims(a, axis=1)
print("b: ", b)     # [[[1 2]] [[3 4]]]
print("shape of b: ", b.shape)      # (2, 1, 2)

# numpy.squeeze(arr, axis) 从给定数组的形状中删除一维的条目
x = np.arange(9).reshape(1, 3, 3)
print("x: ", x)
print("shape of x: ", x.shape)      # (1, 3, 3)
# 注意是一维的条目,若在这里 axis=1 则会报错,以为 axis=1 轴不为 1
y = np.squeeze(x, axis=0)
print("y: ", y)
print("shape of y: ", y.shape)      # (3, 3)

 

  4、连接数组

    a、numpy.concatenate((a1, a2, ...), axis用于沿指定轴连接相同形状的两个或多个数组

    b、numpy.stack(arrays, axis=0, out=None用于沿新轴连接数组序列

    c、numpy.hstack((a1, a2, ...)) 是 numpy.stack 函数的变体,它通过水平堆叠来生成数组

    d、numpy.vstack((a1, a2, ...)) 是 numpy.stack 函数的变体,它通过垂直堆叠来生成数组

import numpy as np

# numpy.concatenate((a1, a2, ...), axis) 用于沿指定轴连接相同形状的两个或多个数组
a = np.array([[1, 2], [5, 6]])
b = np.array([[3, 4], [7, 8]])
# [[1 2 3 4] [5 6 7 8]]
print("使用 1 轴连接 2 个数组: ", np.concatenate((a, b), axis=1))

# numpy.stack(arrays, axis) 用于沿新轴连接数组序列,arrays相同形状的数组序列
# [[1 2] [5 6] [3 4] [7 8]]
print("使用 0 轴堆叠 2 个数组: ", np.concatenate((a, b), axis=0))

# numpy.hstack((a1, a2, ...)) 是 numpy.stack 函数的变体,它通过水平堆叠来生成数组
# [[1 2 3 4] [5 6 7 8]]
print("水平堆叠: ", np.hstack((a, b)))

# numpy.vstack((a1, a2, ...)) 是 numpy.stack 函数的变体,它通过垂直堆叠来生成数组
# [[1 2] [5 6] [3 4] [7 8]]
print("垂直堆叠: ", np.vstack((a, b)))

 

  5、分割数组

    a、numpy.split(ary, indices_or_sections, axis沿特定的轴将数组分割为子数组

    b、numpy.hsplit(ary, indices_or_sections) 用于水平分割数组,通过指定要返回的相同形状的数组数量来拆分原数组

    c、numpy.vsplit(ary, indices_or_sections) 用于垂直分割数组,其分割方式与hsplit用法相同

import numpy as np

# numpy.split(ary, indices_or_sections, axis) 沿特定的轴将数组分割为子数组 # indices_or_sections:果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的位置(左开右闭) arr = np.linspace(1, 100, 10) print("每个子数组长度为 2 分割:", np.split(arr, 5)) # 分割成 arr[0...2) arr[2...4) arr[4...7) arr[7...-1] print("按特定下标分割:", np.split(arr, [2, 4, 7])) # numpy.hsplit(ary, indices_or_sections) 函数用于水平分割数组,通过指定要返回的相同形状的数组数量来拆分原数组 arr = arr.reshape(2, 5) print("After reshape arr: ", arr) print("hsplit the arr: ", np.hsplit(arr, 5)) # numpy.vsplit(ary, indices_or_sections) 沿着垂直轴分割,其分割方式与 hsplit 用法相同 print("vsplit the arr: ", np.vsplit(arr, 2))

 

  6、数组元素的添加与删除

    a、numpy.resize(arr, shape) 返回指定大小的新数组;若新数组大小大于原始大小,则包含原始数组中的元素的副本

    b、numpy.append(arr, values, axis=None) 在数组的末尾添加值

    c、numpy.insert(arr, obj, values, axis=None在给定索引之前,沿给定轴在输入数组中插入值,obj 为索引

    d、numpy.delete(arr, obj, axis) 返回从输入数组中删除指定子数组的新数组,obj 为索引

    e、numpy.unique(arr, return_index, return_inverse, return_counts用于去除数组中的重复元素

 

import numpy as np

# numpy.resize(arr, shape) 返回指定大小的新数组;若新数组大小大于原始大小,则包含原始数组中的元素的副本
arr = np.sin(np.array([0, 30, 45, 60, 90, 120, 135, 150, 180]).reshape(3, 3) * np.pi/180)
np.set_printoptions(precision=1)        # 保留小数点后一位
print("resize(arr, (1, 9)): ", np.resize(arr, (1, 9)))
# 大小大于原始大小,将数组的头 3 个的副本保存到最后一行
print("resize(arr, (4, 3)): ", np.resize(arr, (4, 3)))
# 保存数组第一个元素的副本到末尾
print("resize(arr, (2, 5)): ", np.resize(arr, (2, 5)))
np.set_printoptions(precision=8)        # 默认为 8

# numpy.append(arr, values, axis=None) 在数组的末尾添加值
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 当axis无定义时,是横向加成,返回总是为一维数组
# [1 2 3 4 5 6 7 8 9]
print("append(arr, [7, 8, 9]): ", np.append(arr, [7, 8, 9]))
# 按 0 轴加成,列数要相同,还有就是追加的是二维数组
# [[1 2 3] [4 5 6] [7 8 9]]
print("append(arr, [7, 8, 9], axis=0): ", np.append(arr, [[7, 8, 9]], axis=0))
# 注意行数要相同,[[1 2 3 4 5 6] [4 5 6 7 8 9]]
print("append(arr, [[4, 5, 6], [7, 8, 9]], axis=1): ", np.append(arr, [[4, 5, 6], [7, 8, 9]], axis=1))

# numpy.insert(arr, obj, values, axis) 在给定索引之前,沿给定轴在输入数组中插入值
arr = np.array([1, 2, 3, 4, 5, 6]).reshape(3, 2)
# 如果未提供轴,则输入数组会被展开
print("insert(arr, 3, [6, 6, 6]): ", np.insert(arr, 3, [6, 6, 6]))
print("insert(arr, 3, [7, 8], axis=0): ", np.insert(arr, 3, [7, 8], axis=0))
# 若形状不匹配,还会试图广播数组
print("insert(arr, 1, [6], axis=1): ", np.insert(arr, 1, [6], axis=1))

# numpy.delete(arr, obj, axis) 返回从输入数组中删除指定子数组的新数组
# 如果未提供轴,则输入数组会被展开
print("delete(arr, 2): ", np.delete(arr, 2))
# 分别按 0 轴和 1 轴删除下标为 1 的元素
print("delete(arr, 1, axis=0): ", np.delete(arr, 1, axis=0))
print("delete(arr, 1, axis=1): ", np.delete(arr, 1, axis=1))

# numpy.unique(arr, return_index, return_inverse, return_counts) 用于去除数组中的重复元素
arr = np.array([5, 3, 4, 2, 2, 1, 9, 0, 3, 4])
print("unique(arr): ", np.unique(arr))
# 若 return_index=True 则返回新元素在旧数组中(第一个符合的元素)的下标
print("unique(arr, return_index=True): ", np.unique(arr, return_index=True))
# 若 return_inverse=True 则返回旧数组元素在新数组中的下标
print("unique(arr, return_inverse=True): ", np.unique(arr, return_inverse=True))
# 若 return_counts=True 则返回对应元素在原数组中出现的次数
print("unique(arr, return_counts=True): ", np.unique(arr, return_counts=True))

 

--结束END--

本文标题: NumPy 学习笔记(三)

本文链接: https://www.lsjlt.com/news/182041.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • NumPy 学习笔记(三)
    NumPy 数组操作:   1、修改数组形状     a、numpy.reshape(arr, newshape, order='C') 在不改变数据的条件下修改形状     b、numpy.ndarray.flat 是一个数组元素迭代器...
    99+
    2023-01-31
    学习笔记 NumPy
  • NumPy 学习笔记(一)
    NumPy:   1、NumPy 是一个功能强大的第三方库(需要自己安装),主要用于对多维数组执行计算;      它提供了大量的库函数和操作,可以帮助程序员更轻松地进行数值计算   2、可以和另外两个第三方库 SciPy 和 Matpl...
    99+
    2023-01-31
    学习笔记 NumPy
  • NumPy 学习笔记(四)
    NumPy 算术函数:   1、numpy.reciprocal(arr) 返回参数逐个元素的倒数   2、numpy.power(one, two) 将第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂,即 one^t...
    99+
    2023-01-31
    学习笔记 NumPy
  • NumPy学习笔记(一)
    # NumPy### 安装- 通过安装Anaconda安装NumPy,一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项,包含了大量的科学计算相关的包,其中就包括NumPy- 通过pip安装, ...
    99+
    2023-01-31
    学习笔记 NumPy
  • numpy学习笔记 - numpy常用函
    # -*- coding: utf-8 -*-"""主要记录代码,相关说明采用注释形势,供日常总结、查阅使用,不定时更新。Created on Fri Aug 24 19:57:53 2018 @author: Dev"""   i...
    99+
    2023-01-30
    学习笔记 常用 numpy
  • Redis学习笔记(三) 字典
    Redis的字典使用哈希表作为底层实现,一个哈希表中可以有多个哈希表节点,而每个哈希节点就保存在字典中的一个键值对。 redis字典所用的哈希表由disht结构定义。 typedef struct dictht{ dic...
    99+
    2014-05-20
    Redis学习笔记(三) 字典
  • Python学习笔记三(Python程序
     Linux系统自带的python版本通常都比较低,可以在python官方网站(http://www.python.org/download/)下载最新源码包,然后进行升级安装。1.下载python源码包。wget http://www....
    99+
    2023-01-31
    学习笔记 程序 Python
  • Android学习笔记——Menu介绍(三)
    知识点 今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习。 Popup Menu(弹出式菜单) 弹出式菜单是一种固定在View上的菜单模型。主要用于以下三...
    99+
    2022-06-06
    android学习 Android
  • 【Python3.7学习笔记】三、变量和
    【Python3.7学习笔记】三、变量和简单数据类型 【Python3.7学习笔记】一、环境搭建 【Python3.7学习笔记】二、第一个python程序 【Python3.7学习笔记】三、变量和简单数据类型 【Pytho...
    99+
    2023-01-31
    变量 学习笔记
  • Flutter学习笔记(三)RowColum布局
    目录主题开发环境源码开发过程主题 本文将介绍,flutter中的row,colum的用法。通俗来说,就是横向布局和纵向布局的用法。 开发环境 win10androidstudio20...
    99+
    2023-05-14
    Flutter学习 Flutter Row Flutter Colum Flutter布局
  • PHP学习笔记(观隅反三)
    前言 不知不觉距离上篇PHP的文章 PHP学习笔记(才贯二酉)已经过去好多天了,今天看到推送——1024程序员节,莫名还有些小激动(os:自知自己的一些雕虫小技肯定和程序员这个技术深似海的称号扯不上什...
    99+
    2023-09-01
    1024程序员节 php 开发语言
  • JPetStore 5.0 学习笔记(三.Service层)
    JPetStore 5.0 学习笔记(三.Service层)[@more@]把剩下的UPDATE/DELETE/ADD加上去,运行了一下,所有均成功了下面我们来回顾一下整个ibatis开发过程.首先编写User.xml,为了生效这个xml,...
    99+
    2023-06-03
  • 学习笔记-小甲鱼Python3学习第三讲
    测试题: 以下哪个变量的命名不正确?为什么? (A) MM_520 (B) MM520 (C) 520_MM (D) _520_MM C,变量名可以用字母、数字、下划线命名,但是不能以数字开头 在不上机的情况下,以下代码你能...
    99+
    2023-01-31
    甲鱼 学习笔记 第三讲
  • 学习笔记-小甲鱼Python3学习第三十
    丰富的else语句python中else不仅可以与if搭配组成控制流,还可以与while或for搭配使用要么怎样,要么不怎样干完了能怎样,干不完就别想怎样没有问题,那就干吧举例:求素数def showMaxFactory(num):    ...
    99+
    2023-01-31
    甲鱼 学习笔记
  • 学习笔记-小甲鱼Python3学习第十三
    元组中的元素不能被修改。用()把元素括起来,用,逗号隔开创建和访问元组更新和删除元组元组的相关操作符元组创建:>>> tuple1 = (1,2,3,4,5,6,7,8)            #使用()括起来,用,逗号隔...
    99+
    2023-01-31
    甲鱼 学习笔记
  • python学习笔记(三)—数据库篇
    一、数据库编程 数据库编程是指在应用程序中使用数据库管理系统(DBMS)进行数据存储、检索和处理的过程。数据库提供了一种结构化的方式来组织和存储数据,使得数据的管理更加高效和可靠。 1.1 关系数据库...
    99+
    2023-09-18
    python 学习 笔记
  • Redis学习笔记(十三) 复制(下)
    上一篇写了Redis复制功能的简单应用,下面我们看下Redis复制功能的实现过程。下面基本上是理论部分,枯燥乏味,但希望大家能看看,毕竟知识不都是感兴趣的.耐得住寂寞,经得起诱惑,方能守得住繁华 ~.~旧版复制功能的实现 Redi...
    99+
    2022-04-20
    Redis学习笔记(十三) 复制(下)
  • postgresql学习笔记(三)连接管理
    使用以下三个SQL语句来取消正在运行的查询并终止连接(1)查出活动连接列表及其进程IDselect * from pg_stat_activity;(2)取消连接上的...
    99+
    2022-10-18
  • Python学习笔记整理(十三)Pyth
    一、模块 模块是Pyhon最高级别的程序组织单元,它将程序代码和数据封装起来以便重用。实际的角度,模块往往对应Python程序文件。 每个文件都是一个模块,并且模块导入其他模块之后就可以使用导入模块定义的变量名。模块可以...
    99+
    2023-01-31
    学习笔记 Python Pyth
  • python学习笔记(三)-表单处理
    表单类 默认情况下,Flask-WTF能保护所有表单免受跨站请求伪造攻击(CSRF) app = Flask(__name__) # 强制性必须填写secret_key app.config['SECRET_KEY'] = 'h...
    99+
    2023-01-31
    表单 学习笔记 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作