【Python 零基础入门】Numpy 常用函数

【Python 零基础入门】内容补充 3 Numpy 常用函数

  • 概述
  • Numpy 数组创建
    • np.arange
    • np.linspace
  • 数组操作
    • reshape
    • flatten
    • concatenate
    • split
    • vstack
    • hstack
  • 数学运算
    • add 相加
    • subtract 相减
    • multiply 相乘
    • divide 相除
  • 通用函数
    • np.sqrt 平方根
    • np.log 对数
    • np.exp 指数
    • np.sin 正弦

概述

Numpy (Numerical Python) 是 Python 编程语言的一个扩展程序库, 支持大量的维度数组与矩阵运算, 并提供了大量的数学函数库. Numpy 利用了多线程数组来存储和处理大型数据集, 从而提供了一个高效的方式来进行数值计算, 特别是对于矩阵预算和线性代数.

Python Numpy 常用函数

Numpy 数组创建

Numpy 常用函数

np.arange

np.arange是一个非常实用的函数, 用于创建一系列的值, 类似于 Python 中的range内置函数, 但是返回的是一个数组.

格式:

import numpy as np

array = np.arange(start, stop, step)

参数:

  • start: 数组开始值 (含), 默认为 0
  • stop: 数组结束值 (不含)
  • step: 数组步长

例子:

# 0-9
array1 = np.arange(10)
print(array1)

# 1-10
array2 = np.arange(1, 11)
print(array2)

# 1-10 奇数
array3 = np.arange(1, 11, 2)
print(array3)

输出结果:

[0 1 2 3 4 5 6 7 8 9]
[ 1  2  3  4  5  6  7  8  9 10]
[1 3 5 7 9]

np.linspace

np.linspace可以帮助我们创建一个等差数列.

格式:

import numpy as np

array = np.linspace(start, stop, num, endpoint)

参数:

  • start: 数组起始值
  • stop: 数组结束值
  • num: 生成的眼本书, 默认为 50
  • endpoint: 布尔值, 如果为 True, 则 “stop” 是最后一个样本, 否则不包括 “stop”, 默认为 True

例子:

# 包括 50
array1 = np.linspace(0, 50)
print(array1)

# 不包括 50
array1 = np.linspace(0, 50, endpoint=False)
print(array1)

# 样本为 10
array1 = np.linspace(5, 50, 10)
print(array1)

输出结果:

[ 0.          1.02040816  2.04081633  3.06122449  4.08163265  5.10204082
  6.12244898  7.14285714  8.16326531  9.18367347 10.20408163 11.2244898
 12.24489796 13.26530612 14.28571429 15.30612245 16.32653061 17.34693878
 18.36734694 19.3877551  20.40816327 21.42857143 22.44897959 23.46938776
 24.48979592 25.51020408 26.53061224 27.55102041 28.57142857 29.59183673
 30.6122449  31.63265306 32.65306122 33.67346939 34.69387755 35.71428571
 36.73469388 37.75510204 38.7755102  39.79591837 40.81632653 41.83673469
 42.85714286 43.87755102 44.89795918 45.91836735 46.93877551 47.95918367
 48.97959184 50.        ]
[ 0.  1.  2.  3.  4.  5.  6.  7.  8.  9. 10. 11. 12. 13. 14. 15. 16. 17.
 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35.
 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49.]
[ 5. 10. 15. 20. 25. 30. 35. 40. 45. 50.]

数组操作

Numpy 数组操作

reshape

reshape方法用于改变数组形状而不改变其数据.

格式:

import numpy as np

reshaped_array = reshape(a, newshape)

参数:

  • a: 原始数组
  • newshape: 新的形状

例子:

array = np.arange(6)
reshaped_arrary = array.reshape(2, 3)

# 调试输出
print("原始数组:", array, sep="\n")
print("改变形状后的数组:", reshaped_arrary, sep="\n")

array = np.array([[0, 1, 2], [3, 4, 5]])
reshaped_arrary = array.reshape(-1)

# 调试输出
print("原始数组:", array, sep="\n")
print("改变形状后的数组:", reshaped_arrary, sep="\n")

输出结果:

原始数组:
[0 1 2 3 4 5]
改变形状后的数组:
[[0 1 2]
 [3 4 5]]
原始数组:
[[0 1 2]
 [3 4 5]]
改变形状后的数组:
[0 1 2 3 4 5]

flatten

flatten()可以帮助我们将多维数组降为 1 维数组.

格式:

import numpy as np

flattend_array = array.flatten()

例子:

# 创建原始 ndarray
array = np.array([[0, 1, 2], [3, 4, 5], [7, 8, 9]])

# 降为 1 维
flattened_array = array.flatten()

# 调试输出
print("原始数组:", array, sep="\n")
print("降为 1 维的数组:", flattened_array, sep="\n")

输出结果:

原始数组:
[[0 1 2]
 [3 4 5]
 [7 8 9]]
降为 1 维的数组:
[0 1 2 3 4 5 7 8 9]

concatenate

concatenate可以帮助我们沿着指定轴连接相同形状的两个或多个数组.

格式:

import numpy as np

concatenated_array = np.concatenate((a1, a2, ...), axis=0, out=None)

格式:

  • a1, a2: 需要连接的数组
  • axis: 连接轴, 默认为 0, 即纵向拼接, 如果为 1 则横向拼接
  • out: 放置结果的可选参数, 默认为 None

例子:

# 创建原始数组
array1 = np.array([[1, 2], [3, 4]])
array2 = np.array([[5, 6], [7, 8]])

# 纵向拼接
v_concatenated_array = np.concatenate((array1, array2))

# 横向拼接
h_concatenated_array = np.concatenate((array1, array2))

# 调试输出
print("纵向拼接:", v_concatenated_array, sep="\n")
print("横向拼接:", h_concatenated_array, sep="\n")

输出结果:

array 1:
[[1 2]
 [3 4]]
array 2:
[[5 6]
 [7 8]]
纵向拼接:
[[1 2]
 [3 4]
 [5 6]
 [7 8]]
横向拼接:
[[1 2]
 [3 4]
 [5 6]
 [7 8]]

split

split函数可以帮助我们将一个数组分割为多个子数组.

格式:

import numpy as np

splitted_arrays = np.split(array, indices_or_sections, axis=0)

参数:

  • a: 带分割的数组
  • indices_or_sections: 如果是一个整数, 就将该数平均切分, 如果是数组, 为沿轴切分的位置 (左开有闭)
  • axis: 沿着哪个维度进行切分, 默认为 0

例子:

# 创建原始数组
array = np.arange(9)

# 分割数组为 3 等分
splitted_arrays = np.split(array, 3)

# 调试暑促
print("原始数组:", array)
print("分割后的数组:", splitted_arrays)

# 创建原始数组
array = np.arange(9)

# 以索引 2, 5 分割数组
splitted_arrays = np.split(array, [2, 5])

# 调试暑促
print("原始数组:", array)
print("分割后的数组:", splitted_arrays)

# 创建原始数组
array = np.arange(9).reshape(3, 3)

# 横向 3 等分
splitted_arrays = np.split(array, 3, axis=1)

# 调试暑促
print("原始数组:", array, sep="\n")
print("分割后的数组:", splitted_arrays, sep="\n")

输出结果:

原始数组: [0 1 2 3 4 5 6 7 8]
分割后的数组: [array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8])]
原始数组: [0 1 2 3 4 5 6 7 8]
分割后的数组: [array([0, 1]), array([2, 3, 4]), array([5, 6, 7, 8])]
原始数组:
[[0 1 2]
 [3 4 5]
 [6 7 8]]
分割后的数组:
[array([[0],
       [3],
       [6]]), array([[1],
       [4],
       [7]]), array([[2],
       [5],
       [8]])]

vstack

vstack可以帮助我们将数组进行垂直堆叠.

格式:

import numpy as np

stacked_array = np.vstack((a1, a2, ...))

参数:

  • a1, a2: 需要迭代的数组
  • 返回: 纵向堆叠的数组

例子:

# 原始数组
array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])

# 纵向堆叠
stacked_array = np.vstack((array1, array2))

# 输出结果
print("array1:", array1)
print("array2:", array2)
print("纵向堆叠数组:", stacked_array, sep="\n")

输出结果:

array1: [1 2 3]
array2: [4 5 6]
纵向堆叠数组:
[[1 2 3]
 [4 5 6]]

hstack

hstack可以帮我们将数组进行水平堆叠.

格式:

import numpy as np

stacked_array = np.hstack((a1, a2, ...))

参数:

  • a1, a2: 需要迭代的数组
  • 返回: 横向堆叠的数组

例子:

# 原始数组
array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])
array3 = np.array([7, 8, 9])

# 横向堆叠
stacked_array = np.hstack((array1, array2, array3))

# 输出结果
print("array1:", array1)
print("array2:", array2)
print("array3:", array3)
print("横向堆叠数组:", stacked_array, sep="\n")

输出结果:

array1: [1 2 3]
array2: [4 5 6]
array3: [7 8 9]
横向堆叠数组:
[1 2 3 4 5 6 7 8 9]

数学运算

add 相加

相加

例子:

# 原始数组
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# 相加
add_result = np.add(a, b)

# 调试输出
print("数组 a:", a)
print("数组 b:", b)
print("相加结果:", add_result)

subtract 相减

相减

例子:

# 原始数组
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# 相减
subtract_result = np.subtract(a, b)

# 调试输出
print("数组 a:", a)
print("数组 b:", b)
print("相减结果:", subtract_result)

输出结果:

数组 a: [1 2 3]
数组 b: [4 5 6]
相减结果: [-3 -3 -3]

multiply 相乘

相乘

例子:

# 原始数组
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# 相乘
multiply_result = np.multiply(a, b)

# 调试输出
print("数组 a:", a)
print("数组 b:", b)
print("相乘结果:", multiply_result)

输出结果:

数组 a: [1 2 3]
数组 b: [4 5 6]
相乘结果: [ 4 10 18]

divide 相除

相除

例子:

# 原始数组
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# 相除
divide_result = np.divide(a, b)

# 调试输出
print("数组 a:", a)
print("数组 b:", b)
print("相除结果:", divide_result

输出结果:

数组 a: [1 2 3]
数组 b: [4 5 6]
相除结果: [0.25 0.4  0.5 ]

通用函数

通用函数 (Ufuncs) 是 numpy 的核心部分. 通用函数提供了快速的元素级运算. 这些函数都是在 C 语言级别编写的, 因此能提供 Python 所不具备的高性能. 通用函数的另一个又是是能够直接读取数据, 避免了在 Python 循环中处理数据的开销.

np.sqrt 平方根

例子:

# 原始数组
array = np.array([1, 2, 3])

# 平方根
sqrt_array = np.sqrt(array)

# 调试输出
print("原始数组:", array)
print("平方根数组:", sqrt_array)

输出结果:

原始数组: [1 2 3]
平方根数组: [1.         1.41421356 1.73205081]

np.log 对数

np.log对数组中每个元素计算自然对数 l o g e ( X ) log_e(X) loge(X)

例子:

# 原始数组
array = np.array([1, 2, np.e])

# 对数
log_array = np.log(array)

# 调试输出
print("原始数组:", array)
print("对数数组:", log_array)

输出结果:

原始数组: [1.         2.         2.71828183]
对数数组: [0.         0.69314718 1.        ]

np.exp 指数

np.exp对数组中每个元素计算自然指数 e x e^x ex

例子:

# 原始数组
array = np.array([1, 2, 3])

# 平方根
exp_array = np.exp(array)

# 调试输出
print("原始数组:", array)
print("指数数组:", exp_array)

输出结果:

原始数组: [1 2 3]
指数数组: [ 2.71828183  7.3890561  20.08553692]

np.sin 正弦

例子:

# 原始数组
array = np.array([1, 2, 3])

# 正弦 sin
sin_array = np.sin(array)

# 调试输出
print("原始数组:", array)
print("正弦数组:", sin_array)

输出结果:

原始数组: [1 2 3]
正弦数组: [0.84147098 0.90929743 0.1411200

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何有效使用蜂邮EDM和vba批量发送邮件?

蜂邮EDM和vba批量发送邮件的方法?怎么使用蜂邮EDM和vba代码群发电子邮件? 批量发送邮件已经成为一种不可或缺的沟通方式。蜂邮EDM和VBA是两个功能强大的工具,可以帮助您在邮件营销和业务通信中实现高效的批量发送邮件操作。接下来将介绍如何…

Java设置日期时间的毫秒数为0

背景 做一个发送短信的需求,采用RabbitMQ来实现定时发送。发送时需要验证发送短信任务的预计发送时间和生产者传过来的时间是否一致,一致才发送。 结果在调试的时候,却发现任务一直没法触发。一步步调试,发现是两个时间不相等。明…

理解springboot那些过滤器与调用链、包装或封装、设计模式相关等命名规范,就可以读懂80%的springboot源代码,和其他Java框架代码

紧接上面《 理解springboot那些注册与回调、监控与统计等命名规范,就可以读懂70%的springboot源代码》、《 理解springboot那些约定俗成的框架类名、全局context等命名规范,就可以读懂一半springboot的源代码》2篇文章,此片将汇总springboot那些过滤器与调用链、包装或封装…

【C++ 系列文章 -- 程序员考试 201811 下午场 C++ 专题 】

1.1 C 题目六 阅读下列说明和C代码,填写程序中的空(1) ~(5),将解答写入答题纸的对应栏内。 【说明】 以下C代码实现一个简单乐器系统,音乐类(Music)可以使用…

防雷接地测试方法完整方案

防雷接地是保障电力系统、电子设备和建筑物安全的重要措施,防雷接地测试是检验防雷接地装置是否合格的必要手段。本文介绍了防雷接地测试的原理、方法和注意事项,以及如何编写防雷接地测试报告。 地凯科技防雷接地测试的原理 防雷接地测试的基本原理是…

驱动开发11 编写iic驱动-读取温湿度数据

头文件 head.h #ifndef __HEAD_H__ #define __HEAD_H__ #define GET_HUM _IOR(m, 1, int) #define GET_TEM _IOR(m, 0, int) #endif 应用程序 si7006.c #include <stdlib.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #inc…

高效学习工具之AnkiMobile新手入门指南(ios端,包括ipad、ihpone设备)————创建、使用、备份、设置参数、相关资料

文章目录 0 背景0.1 闭环学习0.2 什么是anki0.3 anki践行者经验分享 1 开始使用1.1 导入1.2 创建空白组1.3 创建卡片1.3.1 利用anki创建卡片的两种方法1.3.2 复习材料分类 1.4 筛选&#xff08;做减法&#xff0c;拆分学习&#xff08;做子卡牌集合&#xff09;&#xff09;&am…

4.1 继承

思维导图&#xff1a; 第4章 面向对象(下) 学习目标: 了解面向对象中的继承特性&#xff0c;掌握继承的概念与特点。掌握方法的重写&#xff0c;能够在子类中重写父类方法。掌握super关键字&#xff0c;明白如何在类中使用super访问父类成员。理解final关键字的作用&#xff0…

微信小程序如何使用地球半径计算两组经纬度点之间的距离(自身位置与接口返回位置)【上】

目录 1.配置位置权限 2.获取当前自身经纬度 3. 请求接口拿到返回经纬 4. 循环取每一项的经纬 5.如何判断是否打开了定位权限 6.进行距离计算操作 7.运行效果 8.完整代码 首先在使用小程序时&#xff0c;请求的接口一定要去配置合法域名&#xff0c;才能够进行接下来…

缓存击穿只会逻辑过期 OR 互斥锁?深入思考 == 鹤立鸡群

网上但凡看得见的文章&#xff0c;大部分在说缓存穿透时都是无脑分布式锁 / 逻辑过期&#xff0c;分布式锁一点问题都没有么&#xff1f;逻辑过期一点问题都没有么&#xff1f;还能不能再进一步优化&#xff1f; 在聊聊缓存击穿的双重判定锁之前&#xff0c;我们将按照循循渐进…

双十一首日捷报 | 德施曼率先破亿,再度蝉联智能锁品类第一

10月31日晚8:00&#xff0c;各大平台迎来了双十一第一波现货开售。其中&#xff0c;在智能锁类目中德施曼势头最为迅猛&#xff0c;此前&#xff0c;德施曼凭借“全民换锁季”主题活动&#xff0c;在预售期间就已经全面引爆消费者换锁热潮&#xff0c;随着此次现货开售&#xf…

cut 命令

cut [选项参数] filename #默认分隔符是制表符 选项参数&#xff1a; -d delimiter 分隔符 -f field 场地、领域&#xff08;第几列&#xff09; 命令使用&#xff1a; cut -d " " -f 1 cut.txt #空格为分隔符截取第1列cut -d " " -f 2,3 cut.txt #截…

百度上传自己个人简介攻略,个人介绍百度百科怎么做?

个人介绍要展示在百度百科上该怎么操作&#xff0c;我们都清楚百度百科词条是需要申请才能拥有的&#xff0c;但是没有百度上传自己个人简介的攻略&#xff0c;很多人是不知从何下手的。下面洛希爱做百科网带着大家一起来了解。 一、了解百度百科词条的创建规则 1. 词条名称规…

jdk官网下载(详细步骤)

jdk全部版本下载网址 Java Archive | Oraclehttps://www.oracle.com/java/technologies/downloads/archive/ 下载之前先建立oracle账号(免费创建)&#xff0c;不用特意去搜&#xff0c;你点击下载jdk的时候会自动弹出来&#xff0c;自己建立一个账号就能下载了 找到自己要下载…

【产品体验】OA办公系统

一、演示地址 http://admin.dianshixinxi.com:90/index 二、办公管理功能 1.我的待办&#xff1a;当前登录用户&#xff0c;办理任务 2.通知公告&#xff1a;通知与公告&#xff0c;已发布通知公告会显示在首页 3.自定义表单&#xff1a;自定义表单&#xff0c;托拉拽的形式…

iZotope RX 10(音频修复和增强工具)

iZotope RX 10是一款音频修复和增强软件&#xff0c;主要特点包括&#xff1a; 声音修复&#xff1a;iZotope RX 10可以去除不良噪音、杂音、吱吱声等&#xff0c;使音频变得更加清晰干净。音频增强&#xff1a;iZotope RX 10支持对音频进行音量调节、均衡器、压缩器、限制器等…

IDEA 使用技巧

文章目录 语言支持简化编写 有问题&#xff0c;可暂时跳过 个人常用快捷键插件主题插件功能插件 碰到过的问题 除了一些在Linux上用vim开发的大佬&#xff0c;idea算是很友好的集成开发工具了&#xff0c;功能全面&#xff0c;使用也很广泛。 记录一下我的 IDEA 使用技巧&#…

解密人工智能:KNN | K-均值 | 降维算法 | 梯度Boosting算法 | AdaBoosting算法

文章目录 一、机器学习算法简介1.1 机器学习算法包含的两个步骤1.2 机器学习算法的分类 二、KNN三、K-均值四、降维算法五、梯度Boosting算法和AdaBoosting算法六、结语 一、机器学习算法简介 机器学习算法是一种基于数据和经验的算法&#xff0c;通过对大量数据的学习和分析&…

虹科示波器 | 汽车免拆检修 | 2013款大众途观车发动机加速无力

一、故障现象 一辆2013款大众途观车&#xff0c;搭载CGM发动机&#xff0c;累计行驶里程约为12.6万km。车主进厂反映&#xff0c;发动机加速无力。 二、故障诊断 接车后试车&#xff0c;发动机怠速运转正常&#xff1b;原地将加速踏板踩到底&#xff0c;发动机转速最高只能达到…

AQS面试题总结

一&#xff1a;线程等待唤醒的实现方法 二&#xff1a; 介绍一下LockSupport 三&#xff1a;AQS是什么 AQS使用一个volatile的int类型的成员变量来表示同步状态&#xff0c;通过内置的FIFO队列完成资源获取排队工作&#xff0c;将每条要去抢占资源的线程封装成一个NODE节点来…