NumPy库是什么

NumPy是Python科学计算的核心库之一,用来进行科学计算,数值分析等矩阵运算。主要提供了以下几种功能:

1.多维数组(ndarray)对象,可以进行快速的数值计算和数组操作;

2.广播(Broadcast)功能,可以对不同形状的数组进行算术运算;

3.数学函数库,可以对数组进行各种数学运算;

4.线性代数、傅里叶变换、随机数生成等工具操作;

5.不同数据类型之间的传输功能;

6.数据的输入和输出功能。

在NumPy中,最重要的是它的ndarray对象,多为n维数组,因此它非常适合处理科学计算中的向量、矩阵等数据结构。numpy比列表更加高效,可以大大提高程序运行速度,是数据处理和科学计算的主要工具之一。

如何在NumPy中生成随机数?

在 NumPy 中,我们可以使用 random 模块来生成随机数。

下面是一些常用的随机数生成函数:

  1. np.random.rand():生成 0 到 1 之间的随机浮点数,可以接收任意个参数作为随机数生成器的形状。

  2. np.random.randn():生成符合标准正态分布的随机数,可以接收任意个参数作为随机数生成器的形状。

  3. np.random.randint():生成整数型的随机数,可以接收两个参数:最小值和最大值。

  4. np.random.random():生成 0 到 1 之间的随机浮点数,可以接收一个参数作为输出的形状。

  5. np.random.shuffle():随机打乱一个序列,可以接收一个参数作为要打乱的序列。

  6. np.random.choice():从指定的序列中随机挑选一个元素,可以接收两个参数:序列和挑选出元素的数量。

import numpy as np

# 生成一个形状为 (3, 2) 的随机浮点数数组
arr1 = np.random.rand(3, 2) # 生成一个形状为 (3, 2) 的符合标准正态分布的随机数数组
arr2 = np.random.randn(3, 2) # 生成 0 到 9 之间的随机整数
randint = np.random.randint(10) # 生成一个形状为 (1, 3) 的随机浮点数数组
arr3 = np.random.random((1, 3)) # 打乱一个序列
arr4 = np.arange(10)
np.random.shuffle(arr4) # 从指定的序列中随机挑选一个元素
choice = np.random.choice([1, 2, 3, 4, 5, 6], 1)

NumPy中NDArray对象有什么特点?

NumPy中NDArray(N-dimensional array)对象有以下特点:

  1. 它是多维数组,可以表示任意维度的数据。

  2. 所有元素必须是同一类型的数据。

  3. 它支持向量化操作,即对整个数组的操作只需要一条语句即可实现。

  4. 它快速且高效,因为它是使用C语言实现的,并且在内存使用和计算效率方面进行了优化。

  5. 它提供了大量的科学计算函数和方法,包括线性代数、傅里叶变换、统计分析等。

  6. 它易于与其他数据处理工具(如Pandas、SciPy等)集成使用,可以提高数据分析处理效率,并且支持大数据量的高效处理。

如何使用NumPy创建对角矩阵?

使用diag函数创建对角矩阵

import numpy as np
# 创建一个3x3的对角矩阵,对角线元素为1
diag_matrix = np.diag([1, 1, 1])
print(diag_matrix)
array([[1, 0, 0],
[0, 1, 0],
[0, 0, 1]])

你也可以在diag函数中使用一个数字来创建对应大小的对角矩阵。

# 创建一个5x5的对角矩阵,对角线元素为2
diag_matrix = np.diag(2*np.ones(5))
print(diag_matrix)
array([[2., 0., 0., 0., 0.],
[0., 2., 0., 0., 0.],
[0., 0., 2., 0., 0.],
[0., 0., 0., 2., 0.],
[0., 0., 0., 0., 2.]])

如何使用NumPy进行数组展平和拉伸操作?

NumPy提供了两个方法flatten()和ravel()都可用于将多维数组展平为一维数组,不同之处在于ravel()返回的是原数组的视图,而flatten()返回的是原数组的副本。下面是使用flatten()和ravel()方法展示多维数组的方法:

1.使用flatten()方法

import numpy as np

# 创建一个2x3的二维数组
a = np.array([[1, 2, 3], [4, 5, 6]]) # 展平数组
b = a.flatten() print('原数组:')
print(a) print('展平后的数组:')
print(b)
原数组:
[[1 2 3]
[4 5 6]] 展平后的数组:
[1 2 3 4 5 6]

2.使用ravel()方法

import numpy as np

# 创建一个2x3的二维数组
a = np.array([[1, 2, 3], [4, 5, 6]]) # 拉伸数组
b = a.ravel() print('原数组:')
print(a) print('拉伸后的数组:')
print(b)
原数组:
[[1 2 3]
[4 5 6]] 拉伸后的数组:
[1 2 3 4 5 6]

如何在NumPy中进行数组广播操作?

NumPy的数组广播操作可以在不同形状的数组之间进行数学运算,简化了数组的操作和计算。数组广播主要遵循以下规则:

  1. 数组维度不同,可以将维度较小的数组延伸为维度较大的数组,使它们的维度相等。
  2. 如果两个数组在某个维度上的形状相同,或者其中一个数组在该维度上的形状为1,则称它们在该维度上是兼容的,可以进行数学运算。
  3. 在任何维度上,如果一个数组形状为1,则可以沿着该维度扩展为另一个数组的对应维度。

以下是一个示例,演示如何使用numpy进行数组广播:

import numpy as np

#创建两个形状不同的数组
a = np.array([1, 2, 3])
b = np.array([[1], [2], [3]]) #打印两个数组的形状
print("a.shape = ", a.shape)
print("b.shape = ", b.shape) #使用数组广播计算a和b的和
c = a + b
print("a + b = \n", c)
a.shape = (3,)
b.shape = (3, 1)
a + b =
[[2 3 4]
[3 4 5]
[4 5 6]]

在这个示例中,我们创建了两个数组a和b,它们的形状不同。然后,我们使用数组广播计算a和b的和。由于a和b的形状不同,我们可以将维度较小的数组b延伸为维度相等的数组,以兼容它们之间的加法运算。最后,我们将结果存储在新数组c中。

如何使用NumPy进行数组的切片和子集选择?

NumPy可以使用切片和布尔索引来选择数组的子集。、

使用切片可以选择数组的某一部分,例如:

import numpy as np

a = np.array([1, 2, 3, 4, 5])
b = a[1:4] # 选择a[1]到a[3]的元素
print(b) # 输出 [2 3 4]

也可以对多维数组进行切片,例如:

a = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
b = a[0:2, 1:3] # 选择a中第1列到第2列、第2行到第3行的元素
print(b) # 输出 [[2 3]
# [5 6]]

使用布尔索引可以根据某种条件选择数组中的元素,例如:

a = np.array([1, 2, 3, 4, 5])
b = a[a > 2] # 选择a中大于2的元素
print(b) # 输出 [3 4 5]

也可以对多维数组使用布尔索引,例如:

a = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
b = a[a > 2] # 选择a中大于2的元素
print(b) # 输出 [3 4 5 6 7 8 9]

注意,布尔索引返回的是一维数组,需要使用reshape方法将其转换为多维数组。可以使用np.where来进行更复杂的条件选择。

如何使用NumPy进行矩阵运算和线性代数计算?

NumPy是Python语言的一个扩展库,专门处理大型多维数组与矩阵运算。NumPy提供了许多线性代数和矩阵操作函数。下面是使用NumPy进行矩阵运算的一些例子:

  • 创建矩阵

要使用NumPy创建一个矩阵,可以使用numpy.array()函数,并将二维数组传递给它。

import numpy as np

# 创建一个3x3的矩阵
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(matrix) # 输出:
# [[1 2 3]
# [4 5 6]
# [7 8 9]]
  • 矩阵转置

要使用NumPy将矩阵转置,可以使用numpy.transpose()函数。

import numpy as np

# 创建一个3x3的矩阵
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(matrix) # 转置矩阵
matrix_transpose = np.transpose(matrix)
print(matrix_transpose) # 输出:
# [[1 2 3]
# [4 5 6]
# [7 8 9]]
# [[1 4 7]
# [2 5 8]
# [3 6 9]]
  • 矩阵相加和矩阵相减

要使用NumPy对矩阵进行加法和减法操作,可以使用numpy.add()和numpy.subtract()函数。

import numpy as np

# 创建两个矩阵
matrix_a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
matrix_b = np.array([[9, 8, 7], [6, 5, 4], [3, 2, 1]]) # 矩阵相加
matrix_sum = np.add(matrix_a, matrix_b)
print(matrix_sum) # 矩阵相减
matrix_diff = np.subtract(matrix_a, matrix_b)
print(matrix_diff) # 输出:
# [[10 10 10]
# [10 10 10]
# [10 10 10]]
# [[-8 -6 -4]
# [-2 0 2]
# [ 4 6 8]]
  • 矩阵乘法

要使用NumPy进行矩阵乘法,可以使用numpy.dot()函数。

import numpy as np

# 创建两个矩阵
matrix_a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
matrix_b = np.array([[9, 8, 7], [6, 5, 4], [3, 2, 1]]) # 矩阵乘法
matrix_prod = np.dot(matrix_a, matrix_b)
print(matrix_prod) # 输出:
# [[ 30 24 18]
# [ 84 69 54]
# [138 114 90]]
  • 行列式和逆矩阵

要使用NumPy计算行列式和逆矩阵,可以使用numpy.linalg.det()和numpy.linalg.inv()函数。

import numpy as np

# 创建一个3x3的矩阵
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 计算矩阵的行列式
matrix_det = np.linalg.det(matrix)
print(matrix_det) # 计算矩阵的逆矩阵
matrix_inv = np.linalg.inv(matrix)
print(matrix_inv) # 输出:
# 0.0
# [[-3.00000000e+00 6.00000000e+00 -3.00000000e+00]
# [ 6.00000000e+00 -1.20000000e+01 6.00000000e+00]
# [-3.00000000e+00 6.00000000e+00 -3.00000000e+00]]

这些只是NumPy中可用的许多矩阵运算之一。NumPy库还提供了其他矩阵运算,如解线性方程组等等 逆矩阵可以计算其它方面的线性代数问题,如解线性方程组,这是数据科学中不可或缺的。

如何使用NumPy进行数据的离散化和分组操作?

使用NumPy进行数据的离散化和分组操作可以使用numpy.digitize和numpy.bincount函数。

numpy.digitize函数可以将一组数据划分为不同的区间,返回每个数据所属的区间编号;numpy.bincount函数可以统计每个区间内数据的数量。这两个函数的联合使用可以实现数据的离散化和分组操作。

例如,对数据进行10个区间的离散化,并统计每个区间内数据的数量可以使用以下代码:

import numpy as np

data = np.array([1, 4, 8, 3, 6, 9, 2, 5, 7, 10])
bins = np.linspace(0, 10, 11) # 划分为10个区间
indices = np.digitize(data, bins) # 划分数据所属区间
counts = np.bincount(indices)

上述代码执行完毕后,counts数组中即为每个区间内数据的数量。可以在此基础上进行更多操作,例如计算每个区间内数据的平均值等。

NumPy如何进行数组的输入和输出?

 

NumPy可以通过多种方式进行数组的输入和输出,包括文本文件、二进制文件、内存缓冲等。

下面是一些常见的数组输入和输出的方法和示例:

  1. 从文本文件读取数组:
  2. 将数组保存到文本文件中:
  3. 从二进制文件读取数组:
  4. 将数组保存到二进制文件中:
  5. 从内存缓冲读取数组:
  6. 将数组保存到内存缓冲中:
import numpy as np
import io # 从文本文件读取数组
data = np.loadtxt('data.txt')
print(data) # 将数组保存到文本文件中
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
np.savetxt('data.txt', data) # 从二进制文件读取数组
data = np.load('data.npy')
print(data) # 将数组保存到二进制文件中
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
np.save('data.npy', data) # 从内存缓冲读取数组
str_data = '1 2 3\n4 5 6\n7 8 9'
data = np.genfromtxt(str_data.splitlines(), delimiter=' ')
print(data) # 将数组保存到内存缓冲中
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
output = io.StringIO()
np.savetxt(output, data, delimiter=',')
str_data = output.getvalue()
print(str_data)

除此之外,NumPy还提供了很多其他的输入和输出方式,如Pandas DataFrame、HDF5等。具体可以查阅官方文档。

【技术积累】Python中的NumPy库【一】的更多相关文章

  1. Python中的numpy库介绍!

    转自:https://blog.csdn.net/codedz/article/details/82869370 机器学习算法中大部分都是调用Numpy库来完成基础数值计算的.安装方法: pip3 i ...

  2. 【归纳】正则表达式及Python中的正则库

    正则表达式 正则表达式30分钟入门教程 runoob正则式教程 正则表达式练习题集(附答案) 元字符\b代表单词的分界处,在英文中指空格,标点符号或换行 例子:\bhi\b可以用来匹配hi这个单词,且 ...

  3. 利用Python中的mock库对Python代码进行模拟测试

    这篇文章主要介绍了利用Python中的mock库对Python代码进行模拟测试,mock库自从Python3.3依赖成为了Python的内置库,本文也等于介绍了该库的用法,需要的朋友可以参考下     ...

  4. Python中使用第三方库xlrd来写入Excel文件示例

    Python中使用第三方库xlrd来写入Excel文件示例 这一篇文章就来介绍下,如何来写Excel,写Excel我们需要使用第三方库xlwt,和xlrd一样,xlrd表示read xls,xlwt表 ...

  5. Python中的Numpy、SciPy、MatPlotLib安装与配置

    Python安装完Numpy,SciPy和MatplotLib后,可以成为非常犀利的科研利器.网上关于这三个库的安装都写得非常不错,但是大部分人遇到的问题并不是如何安装,而是安装好后因为配置不当,在使 ...

  6. 机器学习中的numpy库

            日常学习中总是遇到数据需要处理等问题,这时候我们就可以借助numpy这个工具来做一些有意思的事. 1.生成随机数的几种方式 x=np.random.random(12) ###生成12 ...

  7. 【转】利用Python中的mock库对Python代码进行模拟测试

    出处 https://www.toptal.com/python/an-introduction-to-mocking-in-python http://www.oschina.net/transla ...

  8. Python中的numpy函数的使用ones,zeros,eye

    在看别人写的代码时,看到的不知道的函数,就在这里记下来. 原文是这样用的: weights = ones((numfeatures,1)) 在python中help(): import numpy a ...

  9. python中的turtle库绘制图形

    1. 前奏: 在用turtle绘制图形时,需要安装对应python的解释器以及IDE,我安装的是pycharm,在安装完pycharm后,在pycharm安装相应库的模块,绘图可以引入turtle模块 ...

  10. Python中的Numpy入门教程

    1.Numpy是什么 很简单,Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy.matplotlib一起使用.其实,list已经提供了类似于矩阵的表示形式,不过nu ...

随机推荐

  1. C#中的数据字典Dictionary

    前言 今天上午和往常一样在网上冲浪,看到码甲哥微信群里面在聊一个面试题,比较有意思,这里简单分享下结论中的Dictionary字典. 有50w个int类型的数字,现在需要判断一下里面是否存在重复的数字 ...

  2. 为什么说 ICMP 协议是网络最强辅助

    大家好,我是风筝 轻解网络系列又来了.已有高清 PDF 版本可以离线阅读了,全册 65 页,如果有需要离线版的高清 PDF 可以直接下载. 今天咱们说说 ICMP 协议.ICMP 可谓是网络世界中的最 ...

  3. WPF 界面布局、常用控件入门教程实例 WPF入门学习控件快速教程例子 WPF上位机、工控串口通信经典入门

    WPF(Windows Presentation Foundation)是一种用于创建 Windows 桌面应用程序的框架,它提供了丰富的控件库和灵活的界面布局,可以创建现代化的用户界面.下面是 WP ...

  4. vue之数组的方法

    目录 简介 filter方法 简介 本文会把遇到的数组的方法慢慢补充进来 filter方法 filter()方法是一个过虑方法 以下面的为例:列表dataList会每次取一个值,把值给匿名函数,并执行 ...

  5. [Java]枚举类型:遍历为List

    方式1 Demo import com.google.common.collect.Lists; import java.util.HashMap; import java.util.List; im ...

  6. SpringBoot 整合 JDBC 实例

    0.数据库表 CREATE DATABASE springboot; USE springboot; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_ ...

  7. Spring中事务嵌套这么用一定得注意了!!

    前言 最近项目上有一个使用事务相对复杂的业务场景报错了.在绝大多数情况下,都是风平浪静,没有问题.其实内在暗流涌动,在有些异常情况下就会报错,这种偶然性的问题很有可能就会在暴露到生产上造成事故,那究竟 ...

  8. node.js基于react项目打包部署到nginx中(Linux服务器)

    1.首先进入React项目目录. 2.执行npm命令进行打包(生成dist包或build包). npm run build 3.将打包的静态文件放入nginx目录中(可以自己新创建一个目录,也可以放在 ...

  9. windows 添加应用的临时签名

    我们需要给应用添加数字签名,比如沃通.DigiCert. 申请购买代码签名证书需要一段时间,或者个人开发的应用签名,所以我们需要临时证书. 打开VS-工具-命令行,下面是添加过程 1. 创建一个测试证 ...

  10. html5和css3基础学习笔记

    网页简介 一个页面包括结构.表现.行为三个部分. 结构:HTML用于描述页面的结构. 表现:CSS用于控制页面中元素的样式. 行为:JavaScript用于响应用户操作. 第一部分 HTML 5(Hy ...