科学计算基础软件包Numpy介绍及常用法

news2024/9/28 19:17:51

1.介绍及说明

        NumPy 是一个开源的 Python 库,专门用于科学计算和数值处理。它提供了强大的多维数组对象和丰富的函数库,支持高效的数组运算。NumPy 是许多其他科学计算库(如 SciPy、Pandas、Matplotlib 等)的基础。以下是对 NumPy 的详细介绍和说明。

2.NumPy 的主要特点

1.多维数组对象(ndarray):NumPy 提供了一个高效的多维数组对象,称为 ndarray,支持快速的算术运算和数组操作。

2.广播(Broadcasting):NumPy 支持广播机制,可以在不同形状的数组之间进行算术运算,而无需显式地复制数据。

3.标准数学函数:NumPy 提供了大量的数学函数,包括基本算术运算、统计函数、线性代数函数等。

4.随机数生成:NumPy 包含一个强大的随机数生成器,支持各种概率分布的随机数生成。

5.数组操作:NumPy 提供了丰富的数组操作函数,包括数组切片、索引、连接、分割、形状操作等。

6.与 C/C++ 和 Fortran 代码的集成:NumPy 可以与 C/C++ 和 Fortran 代码进行无缝集成,支持高性能计算。

3.安装 NumPy

使用 pip 可以轻松安装 NumPy:

pip install numpy

代码秀:

def test():
    installs = [
        "1. pip install numpy",
        "3. 还可以试试豆瓣的源:pip install numpy -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com",
        "2. 如果装不了,就试试阿里的源:pip install numpy -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com",
    ]

    installs.sort(key=lambda i: i[0])
    for step in installs:
                                                                                                                                  
        items = step.split(":")
        print(items[0])
        if len(items) > 1:
            print(f"  {items[1]}")


if __name__ == '__main__':
    test()

4.NumPy 基础示例

以下是一些 NumPy 的基础示例代码,展示了其主要功能和用法。

1.创建数组

import numpy as np

# 创建一维数组
a = np.array([1, 2, 3, 4, 5])
print(a)

# 创建二维数组
b = np.array([[1, 2, 3], [4, 5, 6]])
print(b)

# 创建全零数组
c = np.zeros((2, 3))
print(c)

# 创建全一数组
d = np.ones((3, 3))
print(d)

# 创建单位矩阵
e = np.eye(3)
print(e)

# 创建等差数组
f = np.arange(0, 10, 2)
print(f)

2.数组运算

# 数组加法
g = a + 1
print(g)

# 数组乘法
h = a * 2
print(h)

# 数组间运算
i = a + np.array([5, 4, 3, 2, 1])
print(i)

# 广播机制
j = a + np.array([[1], [2], [3], [4], [5]])
print(j)

3.数组切片和索引

k = np.array([1, 2, 3, 4, 5])
print(k[1:3])  # 切片
print(k[::2])  # 步长为2的切片

l = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(l[1, :])  # 第二行
print(l[:, 1])  # 第二列
print(l[1, 1])  # 元素 (1,1)

4.数组形状操作

m = np.array([[1, 2, 3], [4, 5, 6]])
print(m.shape)  # 数组形状

n = m.reshape((3, 2))  # 重塑数组
print(n)

o = m.flatten()  # 展平数组
print(o)

5.线性代数

p = np.array([[1, 2], [3, 4]])
q = np.array([[5, 6], [7, 8]])

# 矩阵乘法
r = np.dot(p, q)
print(r)

# 矩阵转置
s = np.transpose(p)
print(s)

# 逆矩阵
t = np.linalg.inv(p)
print(t)

# 特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(p)
print(eigenvalues)
print(eigenvectors)

6.随机数生成

# 生成均匀分布的随机数
u = np.random.rand(3, 3)
print(u)

# 生成正态分布的随机数
v = np.random.randn(3, 3)
print(v)

# 生成整数随机数
w = np.random.randint(0, 10, (3, 3))
print(w)

5.NumPy 功能示例 

1.取列表中最小的前几位

import numpy as np

def get_top_n(array, top_n):
    top_n_indexs = np.argsort(array)[0:top_n]
    results = [array[index] for index in top_n_indexs]
    return results

if __name__ == '__main__':
    ret = get_top_n(np.array([1, 3, 34, 4, 5, 6]), 3)
    print(ret)

运行结果:

2.取列表中最大的前几位 

import numpy as np

def get_top_n(array, top_n):
    top_n_indexs = np.argsort(array)[:-(top_n+1):-1]
    results = [array[index] for index in top_n_indexs]
    return results

if __name__ == '__main__':
    ret = get_top_n(np.array([1, 3, 34, 4, 5, 6]), 3)
    print(ret)

运行结果:

分析:

        上面代码定义了一个函数 get_top_n,用于从一个 NumPy 数组中获取最大的 top_n 个元素。代码逻辑非常清晰,使用了 np.argsort 函数来获取排序后的索引,然后利用这些索引获取相应的数组元素。

以下是对代码的详细解读:

1.np.argsort(array) 返回的是数组元素从小到大的索引。
2.[:-(top_n+1):-1] 是一个切片操作,用于获取从末尾向前数的 top_n 个索引,对应的就是数组中最大的 top_n 个元素的索引。
3.[array[index] for index in top_n_indexs] 是一个列表推导式,用于根据这些索引获取数组中的相应元素。

代码的功能是正确的,但使用列表推导式可能会稍微影响性能,因为它会将 NumPy 数组转换为 Python 列表。你可以直接使用 NumPy 数组来提高性能和简洁性。

以下是优化后的版本:

import numpy as np

def get_top_n(array, top_n):
    top_n_indexs = np.argsort(array)[-top_n:][::-1]
    results = array[top_n_indexs]
    return results

if __name__ == '__main__':
    ret = get_top_n(np.array([1, 3, 34, 4, 5, 6]), 3)
    print(ret)

        在这个优化版本中,results 直接使用了 NumPy 数组的切片和索引功能,避免了将数组转换为列表的操作。这样做不仅能提高性能,还能保持代码的简洁性。

测试结果

运行优化后的代码,结果如下:

[34  6  5]

这表明函数正确地返回了数组中最大的 3 个元素 [34, 6, 5]

import numpy as np


def get_top_n(array, top_n):
    top_n_indexs = np.argsort(array)[:-top_n:-1]
    results = [array[index] for index in top_n_indexs]
    return results


if __name__ == '__main__':
    ret = get_top_n(np.array([1, 3, 34, 4, 5, 6]), 3)
    print(ret)

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

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

相关文章

【开源大模型生态4】大模型和安卓时刻

开源大模型,指基于开源软件模式,由全球开发者共同参与、共同维护、共同发展的机器学习模型。 我们之前有过关于开源大模型和对应开源协议的探讨: 【AI】马斯克说大模型要开源,我们缺的是源代码?(附一图看…

‌智慧公厕:城市文明的智慧新篇章‌@卓振思众

在日新月异的城市化进程中,公共设施的智能化升级已成为不可逆转的趋势。其中,智慧公厕作为城市智慧化建设的重要组成部分,正悄然改变着我们的生活。智慧公厕,这一融合了物联网、大数据、云计算等现代信息技术的创新产物&#xff0…

数学建模常见模型(下)

目录 神经网络法详细介绍 1. 引言 2. 神经网络的基本概念 2.1 神经元 2.2 层次结构 2.3 激活函数 3. 神经网络的工作原理 3.1 前向传播 3.2 反向传播 4. 神经网络的类型 4.1 前馈神经网络(Feedforward Neural Networks, FNN) 4.2 卷积神经网…

云计算之存储

目录 一、产品介绍 1.1 对象存储oss 1.2 特点 二、产品技术背景 三、产品架构及功能 四、常见问题及排查思路 4.1 两个bucket目录文件如何快速复制? 4.2 oss里的目录如何删除? 4.3 能否统计oss一个目录的大小 4.4 异常诊断 - 上传下载速度慢 4…

开源项目|聚合支付工具,封装了某宝、某东、某银、PayPal等常用的支付方式

前言 IJPay是一款开源的支付SDK,它集成了微支付、某宝支付、银联支付等多种支付方式,为开发者提供了一种简单、高效的方式来处理支付问题。以下是IJPay的一些主要特点: 支持多种支付方式:IJPay支持微信支付、支付宝支付、银联支付…

ffmpeg命令(详解)

欢迎诸位来阅读在下的博文~ 在这里,在下会不定期发表一些浅薄的知识和经验,望诸位能与在下多多交流,共同努力 文章目录 一、常见命令二、实战三、总结 一、常见命令 ffmpeg -i input.mp4 -c copy output.mp4解释:-i 后面接输入文…

应用在蓝牙耳机中的低功耗DSP音频处理芯片-DU561

在当今社会,随着科技的不断发展,人们对于电子产品的需求也在日益增长。蓝牙耳机就是将蓝牙技术应用在免持耳机上,让使用者可以免除恼人电线的牵绊,自在地以各种方式轻松通话。自从蓝牙耳机问世以来,一直是行动商务族提…

【递归、回溯专题(二)】DFS解决floodfill算法

文章目录 1. 图像渲染2. 岛屿数量3. 岛屿的最大面积4. 被围绕的区域5. 太平洋大西洋水流问题6. 扫雷游戏7. 机器人的运动范围 1. 图像渲染 算法原理: 这题不需要创建visit数组去记录使用过的节点,因为我每次dfs都尝试修改image数组的值,当下…

[Linux]:权限

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. Linux权限的基本概念 1.1 root与普通用户 在Linux系统中,存在…

内部知识库:企业智慧资产的安全守护者

引言 在知识经济时代,企业的核心竞争力越来越依赖于其知识资源的积累、管理和利用。内部知识库,作为企业知识管理的重要组成部分,扮演着智慧资产守护者的关键角色。它不仅承载着企业多年来的经验积累、技术创新和业务流程知识,还…

2024年“羊城杯”粤港澳大湾区网络安全大赛 初赛 Web数据安全AI 题解WriteUp

文章首发于【先知社区】:https://xz.aliyun.com/t/15442 Lyrics For You 题目描述:I have wrote some lyrics for you… 开题。 看一下前端源码,猜测有路径穿越漏洞 http://139.155.126.78:35502/lyrics?lyrics../../../../../etc/passw…

中国同一带一路沿线国海关货物进出口额表(年)1994-2022进出口总额进口总额出口总额

数据来源:基于相关(证券、货币、期货等)交易所、各部委、省、市、区县统计NJ、或各地区公布的数据(若是全球各国数据,主要来源于世界银行世界发展指标WDI、或联合国统计数据) 数据范围:&#x…

安装Android Studio及第一个Android工程可能遇到的问题

Android Studio版本众多,电脑操作系统、电脑型号、电脑硬件也是多种多样,幸运的半个小时内可以完成安装,碰到不兼容的电脑,一天甚至更长时间都无法安装成功。 Android安装及第一个Android工程分为4个步骤,为什么放到一…

E31.【C语言】练习:指针运算习题集(上)

Exercise 1 求下列代码的运行结果 #include <stdio.h> int main() {int a[5] { 1, 2, 3, 4, 5 };int* ptr (int*)(&a 1);printf("%d",*(ptr - 1));return 0; } 答案速查: 分析&#xff1a; Exercise 2 求下列代码的运行结果 //在x86环境下 //假设结…

使用Ansible stat模块检查目录是否存在

使用Ansible stat模块检查目录是否存在或者是否为一个目录还是文件 理论知识 在Ansible中&#xff0c;你可以使用stat模块来检查一个目录是否存在。stat模块可以用来获取文件或目录的状态信息&#xff0c;包括它是否存在。下面是一个简单的例子&#xff0c;说明如何使用stat模…

9/3作业

一、继承&#xff08;inhert&#xff09; 面向对象三大特征&#xff1a;封装、继承、多态 继承&#xff1a;所谓继承&#xff0c;是类与类之间的关系。就是基于一个已有的类&#xff0c;来创建出一个新类的过程叫做继承。主要提高代码的复用性。 1.1 继承的作用 1> 实现…

GraphRAG工程落地成本详细解读和实例分析

最近半年GraphRAG引起不少关注&#xff0c;。GraphRAG代表了一种创新的方法&#xff0c;用于支持检索增强生成&#xff08;RAG&#xff09;应用&#xff0c;使组织能够从其复杂的数据集中提取前所未有的价值。然而&#xff0c;与大多数组织使用的相对简单的数据嵌入和向量化过程…

mkv怎么转换成mp4?2个简单易用的格式转换方法

小王立志成为一名vlogger&#xff0c;为此&#xff0c;他在旅行的时候拍摄了一段旅游视频&#xff0c;把视频保存在mkv格式中。在平台上传时小王才发现mkv视频不被平台支持。 小王傻眼了&#xff0c;视频需要把mkv转换成mp4格式才能发布&#xff0c;但mkv怎么转换成mp4&#x…

Socket编程---TCP篇

目录 一. TCP协议 二. 服务端模块代码实现 三. 服务端调用模块代码实现 四. 客户端模块代码实现 五. 初始版本结果展示 六. 多进程版服务端 七. 多线程版服务端 八. 线程池版服务端 前文已经讲了UDP的知识&#xff08;点此查看&#xff09;。今天来讲讲…

探索AWS EC2:云计算的强大引擎

在数字化转型的浪潮中&#xff0c;企业对计算资源的需求不断增长。亚马逊弹性计算云&#xff08;EC2&#xff09;作为AWS&#xff08;亚马逊网络服务&#xff09;的核心产品之一&#xff0c;凭借其强大的功能和灵活性&#xff0c;成为了全球企业构建和扩展应用的首选平台。无论…