ad

从《Python数据分析案例教程》中_领悟数据和Python的魅力_3.1 认识 NumPy

admin 69 2023-10-25

【摘要】 本书摘自《Python数据分析案例教程》一书中第3章,第1节,由万念斌、肖伟东、叶丰标编著。

3.1 认识 NumPy

NumPy 是 Python 语言的一个扩展程序库,主要用于数学和科学计算,特别是数组计 算。它是一个提供多维数组对象、多种派生对象(如矩阵)以及用于快速操作数组的函数和 API,包括数学、逻辑、数组形状变换、排序、选择、I/O、离散傅立叶变换、基本线性代数、基本 统计运算、随机模拟等。

NumPy 包的核心是n 维数组对象ndarray,它是一系列同类型数据的集合,下标从0开 始进行集合中元素的索引。

NumPy 数组和标准 Python Array(数组)的区别是:

从《Python数据分析案例教程》中_领悟数据和Python的魅力_3.1 认识 NumPy

(1)NumPy 数组在创建时具有固定的大小,与 Python 的原生数组对象(可以动态增 长)不同。更改 ndarray 的大小将创建一个新数组并删除原来的数组。

(2)NumPy 数组中的元素都需要具有相同的数据类型,因此在内存中的大小相同。 Python 的原生数组里包含 NumPy 对象时,就允许不同大小元素的数组。

(3)NumPy 数组有助于对大量数据进行高级数学和其他类型的操作,这些操作的执行 效率更高,比使用Python 原生数组的代码更少。

(4)越来越多的基于Python 的科学和数学软件包使用NumPy 数组,虽然这些工具通 常都支持Python 的原生数组作为参数,但它们在处理之前还是会将输入的数组转换为 NumPy 数组,输出也通常为 NumPy 数组。

3.2 ndarray

整个 NumPy 库的基础是 ndarray 对象,它的特点是:

(1)ndarray对象用于存放同类型元素的多维数组。

(2)ndarray中的每个元素在内存中都有相同存储大小的区域。

(3)ndarray内部结构: 一个指向数据(内存或内存映射文件中的一块数据)的指针、数据 类型或 dtype、一个表示数组形状(shape)的元组(即表示各维度大小的元组)和一个跨度元

组(stride),其中的整数指的是前进到当前维度下一个元素需要跨过的字节数。如图3-1 所示。

3.2.1 创建 NumPy 数组

NumPy 创建 ndarray 数组的构造方法是:

numpy.array(object,dtype=None,copy=True,order=None,subok=False,ndmin=0) 各参数的作用如表3-1所示。

例如:

import numpy as np

a=np.array([1,2,3])

print(a)

【案例3-1】创建一个元素为1到50的10个随机整数的 ndarray对象和一个范围在(0,1) 之间长度为6的等差数列 ndarray 对象。代码如下:

import numpy as np

def main():

#创建一维数组:10个1到50之间的随机数

a=np.array(np.random,randint(1,51,size=10))#调用随机数类的生成随机整数方法 randint print(a)

#创建一个范围在(0,1)之间长度为6的等差数列

b=np.linspace(0,1,6)

print(b)

if name ==" main ":

__ __ __ __

main()

程序运行结果如下:

[33 1 38 24 32 26 3 22 32 15]

[0.0.2 0.4 0.6 0.8 1.]

【案例3-2】创建一个每一行都是从0到4的5行5列矩阵和一个6行6列边界全为1, 里面全为0的矩阵。代码如下:

import numpy as np

def main():

#创建一个每一行都是从0到4的5*5矩阵

a=[np.arange(0,5)] # 生成0到4的列表

nd=np.array(a*5) # 生成5组0到4的数组

nd.reshape(5,5) #设置数组的形状为5行5列

print(nd)

#创建一个6*6的ndarray对象,且矩阵边界全为1,里面全为0

b=np.zeros(shape=(6,6),dtype=np.int8) # 生成6行6列全为0的矩阵

b[[0,5]]=1 # 将第0行和第5行全设为1

b[:,[0,5]]=1 # 将第0列和第5列全设为1

print(b)

if name ==" main ":

main()

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 [email protected] 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《JAVA服务端研发知识图谱》_让你更懂Java后台研发_第二篇 服务框架篇
下一篇:《基于Kubernetes的容器云平台实战》_了解最新技术前沿_3.2.5 构建镜像
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×