【Python爬虫与数据分析】NumPy初阶——数组创建与访问

这篇具有很好参考价值的文章主要介绍了【Python爬虫与数据分析】NumPy初阶——数组创建与访问。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、NumPy概述

二、NumPy数据类型

三、创建数组

1. numpy.array函数创建数组

2. np.arange创建数组

3. numpy.random.rand创建数组

4. numpy.random.randint创建数组

5. NumPy创建特殊数组

四、数组的属性

五、NumPy数组索引与切片


一、NumPy概述

NumPy(Numerical Python的简称)是一个开源的Python科学计算库,用于对多维数组进行快速操作以及与其相关的数学运算。它是由Travis Oliphant于2005年创建的,旨在通过提供大量的数学和统计工具,满足科学家、工程师和数据分析师在Python编程中高效处理数据的需求,NumPy本身并没有提供很多高级的数据分析功能,许多其他的数据科学工具都是基于 NumPy 开发的,理解NumPy数组以及面向数组的计算将有助于你更加高效地使用诸如pandas之类的工具。

NumPy库特点:

  • ndarray:NumPy的核心数据结构是ndarray(N-dimensional array,多维数组),存储相同类型的元素。
  • 数组操作:NumPy的数组操作包括算术运算、逻辑运算、线性代数运算、统计运算......
  • 数学函数库:NumPy包含了大量的数学函数,包括三角函数、指数和对数函数、线性代数函数、随机数生成函数......
  • 广播(Broadcasting):广播允许不同形状的数组直接进行算术运算,避免了显示循环,提高代码效率。
  • 索引和切片:类似Python的列表和C语言的多维数组进行索引和切片。

NumPy数组和Python列表的区别:

  • NumPy数组中的所有元素都是相同类型的
  • NumPy数组效率远高于Python列表
  • NumPy数组提供了全面的数学函数可以直接对多维数组进行运算

二、NumPy数据类型

Python 原生的数据类型相对较少, bool、int、float、str等。这在不需要关心数据在计算机中表示的所有方式是方便的。但是,对于科学计算,通常需要更多的控制。

NumPy支持的数据类型比Python内置的类型要多很多,这其中部分类型与Python内置的类型是一样的,为了加以区分,NumPy在与Python相同的数据类型名称末尾都加了“_”。

类型 备注 说明
bool_ 8位 布尔类型
int8 8位 整型(-128 to 127)
int16 16位 整型(-32768 to 32767)
int32 32位 整型(-2147483648 to 2147483647)
int_  64位 整型(-9223372036854775808 to
9223372036854775807)
uint8 8位 无符号整型(0 to 255)
uint16 16位 无符号整型(0 to 65535)
uint32 32位

无符号整型(0 to 4294967295)

uint64 64位 无符号整型(0 to 18446744073709551615)
float16 16位 浮点型
float32 32位 浮点型
float_ 64位 浮点型
str_ Unicode字符串
datetime64 日期时间
timedelta64 时间间隔

每个内置类型都有一个唯一定义它的字符代码:

字符 对应类型 备注
b boolean 'b1'
i signed integer 'i1', 'i2', 'i4', 'i8'
u unsigned integer 'u1', 'u2' ,'u4' ,'u8'
f floating-point 'f2', 'f4', 'f8'
c complex floating-point
m timedelta64 表示两个时间之间的间隔
M datetime64 日期时间类型
O object
S (byte-)string S3表示长度为3的字符串
U Unicode Unicode 字符串
V void

示例:

import numpy as np

a = np.dtype('b1')
print(a.type) # <class 'numpy.bool_'>

a = np.dtype('i4')
print(a.type) # <class 'numpy.int32'>

a = np.dtype('i8')
print(a.type) # <class 'numpy.int64'>

a = np.dtype('u2')
print(a.type) # <class 'numpy.uint16'>

a = np.dtype('u8')
print(a.type) # <class 'numpy.uint64'>

a = np.dtype('f4')
print(a.type) # <class 'numpy.float32'>

a = np.dtype('f8')
print(a.type) # <class 'numpy.float64'>

a = np.dtype('S')
print(a.type) # <class 'numpy.bytes_'>

a = np.dtype('S3')
print(a.type) # <class 'numpy.bytes_'>

a = np.dtype('U3')
print(a.type) # <class 'numpy.str_'>

NumPy常量:

  • 【numpy.nan】:表示空值,nan = NaN = NAN,numpy.isnan() 判断是否为空
  • 【numpy.inf】:表示正无穷大(负的无穷大:-np.inf),numpy.isinf() 判断是否是正负无穷大
  • 【numpy.pi】:表示圆周率,3.14
  • 【numpy.e】:表示自然常数,2.71
import numpy as np
a = np.array([1, np.nan, 3, np.inf, 5, np.pi, 7, np.e])
np.isnan(a)
# array([False,  True, False, False, False, False, False, False])
np.isinf(a)
# array([False, False, False,  True, False, False, False, False])

三、创建数组

NumPy最重要的一个特点就是其N维数组对象(即ndarray),它是 python 中 list 的扩展,是一个快速而灵活的大数据集容器。
 

1. numpy.array函数创建数组

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
参数名称 描述
object 数组或嵌套的数列
dtype 数组元素的数据类型,可选
copy 对象是否需要复制,可选
order 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
subok 默认返回一个与基类类型一致的数组
ndmin 指定生成数组的最小维度
import numpy as np

# 创建一维数组
a1 = np.array([1, 2, 3])
# array([1, 2, 3])

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

# 创建三维数组
a3 = np.array([[[1, 2, 3],
                [4, 5, 6]],
               [[7, 8, 9],
                [10, 11, 12]]])
# array([[[ 1,  2,  3],
#         [ 4,  5,  6]],
#
#        [[ 7,  8,  9],
#         [10, 11, 12]]])

# 查看数组形状
print(np.shape(a1), np.shape(a2), np.shape(a3))
print(a1.shape, a2.shape, np.shape(a3))
# (3,) (2, 3) (2, 2, 3)

# 查看数组维度
print(np.ndim(a1), np.ndim(a2), np.ndim(a3))
print(a1.ndim, a2.ndim, a3.ndim)
# 1 2 3

2. np.arange创建数组

numpy.arange(start, stop, step, dtype=None)
  • start:起始数字,默认为0
  • stop:结束数字
  • step:步长,默认为1
  • dtype:指定数据类型
import numpy as np

a1 = np.arange(5)
print(a1)   # [0, 1, 2, 3, 4]

a2 = np.arange(2, 8)
print(a2)   # [2 3 4 5 6 7]

a3 = np.arange(2, 10, 2)
print(a3)   # [2 4 6 8]

a4 = np.arange(2, 10, 3, float)
print(a4)   # [2. 5. 8.]

3. numpy.random.rand创建数组

numpy.random.rand(d0,d1,…,dn)
  • 创建数组,返回一个由[0,1)内的随机数组成的数组
  • d0,d1,...dn: 数组的维度
import numpy as np

a1 = np.random.rand(5)
print(a1)
# [0.52096722 0.79390646 0.67468159 0.28415768 0.4231725 ]

a2 = np.random.rand(2, 3)
print(a2)
# [[0.80116637 0.25449359 0.32428079]
#  [0.77801779 0.04284573 0.58361303]]

4. numpy.random.randint创建数组

numpy.random.randint(low, high=None, size=None, dtype=’l’)

创建数组,返回随机整数或整型数组,范围区间为 [low, high)

  • low:最小值,如果没有指定high这个参数,则low为生成的元素值的最大值
  • high:最大值
  • size:数组维度大小
  • dtype:数据类型,默认的数据类型是np.int
import numpy as np

a1 = np.random.randint(5)
# 返回 0 ~ 5 之间的随机数

a2 = np.random.randint(2, 5, size=(2, 3))
# 返回形状为(2, 3)的数组,每个元素的值为 2 ~ 5

5. NumPy创建特殊数组

全0、全1数组:

numpy.zeros(shape, dtype=None, order='C')
numpy.ones(shape, dtype=None, order='C')
  • order:在计算机内存中存储元素的顺序,“C”行优先,“F”列优先
import numpy as np

a1 = np.zeros(2)
print(a1)   # [0. 0.]
# 返回两个元素为0的一维数组

a2 = np.zeros((2, 3), dtype=int)
print(a2)
# [[0 0 0]
#  [0 0 0]]

a3 = np.ones((3, 2), dtype=int)
print(a3)
# [[1 1]
#  [1 1]
#  [1 1]]


单位数组:返回一个对角线上为1,其它地方为零的单位数组。

numpy.eye(N, M=None, k=0, dtype=float, order='C')
参数 描述
N 返回数组的行数,int
M 输出中的列数。如果没有,则默认为 N 。可选
k 对角线的索引:0(默认)表示主对角线,正值表示上对角线,负值表示下对角线。可选
dtype 返回数组的数据类型。可选
order 在计算机内存中的存储元素的顺序,"C"行优先,"F"列优先。可选
import numpy as np

a1 = np.eye(3)
print(a1)
# [[1. 0. 0.]
#  [0. 1. 0.]
#  [0. 0. 1.]]

a2 = np.eye(4, dtype=int)
print(a2)
# [[1 0 0 0]
#  [0 1 0 0]
#  [0 0 1 0]
#  [0 0 0 1]]

常数数组:

numpy.full(shape, fill_value, dtype=None, order='C')
  • shape:数组形状,参数值可以是int,int元组,int列表
  • fill_value:填充值
import numpy as np

arr1 = np.full([2,3], 4)
print(arr1)
# [[4, 4, 4],
#  [4, 4, 4]]

arr2 = np.full([3, 3], True)
print(arr2)
# [[ True  True  True]
#  [ True  True  True]
#  [ True  True  True]]

等差数列数组:生成一个指定大小,指定数据区间的均匀分布序列

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
  • start:起始数字。
  • end:结束数字。
  • num:生成序列个数;其值默认为50。
  • endpoint:取True时,序列包含最大值end;否则不包含;默认为True。
  • retstep:该值取True时,生成的序列中显示间距;否则不显示;默认为false。
  • dtype:数据类型;当为None时,根据其他输入推断数据类型。
import numpy as np

a1 = np.linspace(1, 10, 5)
print(a1)
# [ 1. , 3.25, 5.5 , 7.75, 10. ]

a2 = np.linspace(1, 10, 5, dtype=np.int_)
print(a2)
# [ 1  3  5  7 10]      # 向下取整

a3 = np.linspace(1, 10, 5, endpoint=False)
print(a3)
# [1.  2.8 4.6 6.4 8.2]

四、数组的属性

属性 说明
ndarray.ndim 数组的维数(轴 axis 的个数)也称为秩,一维数组的秩为 1,二维数组的秩
为 2,以此类推
ndarray.shape 数组的形状,返回一个元组,这个元组的长度就是数组的维数
ndarray.size 数组元素的总个数,相当于 numpy.shape 中 n*m 的值
ndarray.dtype ndarray 对象的元素类型
ndarray.itemsize ndarray 对象中每个元素的大小,以字节为单位
ndarray.flags ndarray 对象的内存信息
ndarray.real ndarray 元素的实部
ndarray.imag ndarray 元素的虚部

numpy.ndarray.ndim 用于返回数组的维数(轴的个数)也称为秩,一维数组的秩为 1,二维数
组的秩为 2,以此类推。

import numpy as np

arr = np.random.randint(1, 10, size=(3, 4))
print(arr)
# [[9 9 7 9]
#  [4 6 8 1]
#  [6 2 5 5]]

print(arr.ndim, arr.shape, arr.size, arr.dtype, arr.itemsize)
# 2 (3, 4) 12 int32 4

print(arr.flags)
# C_CONTIGUOUS: True
# F_CONTIGUOUS: False
# OWNDATA: True
# WRITEABLE: True
# ALIGNED: True
# WRITEBACKIFCOPY: False

print(arr.real)
# [[9 9 7 9]
#  [4 6 8 1]
#  [6 2 5 5]]

print(arr.imag)
# [[0 0 0 0]
#  [0 0 0 0]
#  [0 0 0 0]]

五、NumPy数组索引与切片

ndarray的索引类似于C语言的多维数组的访问,通过下标和维度进行索引访问元素。

ndarray还支持条件判断索引,将符合条件的元素组成一维数组返回。

import numpy as np

arr = np.arange(12)
# [ 0  1  2  3  4  5  6  7  8  9 10 11]

print(arr[1])                   # 1,下标索引
print(arr[[0, 2, 4]])           # [0 2 4],整数数列索引
print(arr[arr > 5])             # [ 6  7  8  9 10 11],布尔索引

arr = np.array([[1, 3, 5],
                [2, 4, 6]])

print(arr[1], arr[0])                # [2 4 6] [1 3 5]
print(arr[1][2], arr[0][1])          # 6 3
print(arr[arr > 2])                  # [3 5 4 6]
print(arr[(arr > 2) & (arr < 5)])    # [3 4]
print(arr[(arr > 5) | (arr < 2)])    # [1 6]
# 多个条件判断只能用 & 和 | , 不能用 and or , 条件要加括号

arr = np.array([np.nan, 1, 2, np.nan])
# [nan  1.  2. nan]

# ~(取补运算符)来过滤NAN
print(arr[np.isnan(arr)])       # [nan nan]
print(arr[~np.isnan(arr)])      # [1. 2.]

ndarray与 Python 中 list 的切片操作类似,numpy.ndarray对象的内容可以通过索引或切片来访问和修改。

numpy数组切片需要使用切片语法,arr[i, j, k, ...],i, j, k分别代表数组第0维、第1维、第2维,通过 (start : stop : step) 方式来操作,从原数组中切割出一个新数组, step默认为1。

一维数组切片:

import numpy as np

arr = np.arange(1, 9)
# [ 0  1  2  3  4  5  6  7  8]

print(arr[:5])      # [1 2 3 4 5]
print(arr[1::2])    # [2 4 6 8], 设置步长为2
print(arr[::-1])    # [8 7 6 5 4 3 2 1], 设置步长为-1, 逆序输出

二维数组切片:

多维数组切片,通过对每个以逗号分隔的维度执行单独的切片,对于二维数组,我们的第一片定义了行的切片,第二片定义了列的切片。

import numpy as np

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

print(arr[0])
# [1 2 3]

print(arr[0:2])
# [[1 2 3]
#  [4 5 6]]

print(arr[0:1])
# [[1 2 3]]

print(arr[0:3:2])
# [[1 2 3]
#  [7 8 9]]
# 设置步长为2

print(arr[:, 1])
# [2 5 8]

print(arr[1:3, 1:3])
# [[5 6]
#  [8 9]]

print(arr[::2, ::2])
# [[1 3]
#  [7 9]]

print(arr[::, ::-1])
# [[3 2 1]
#  [6 5 4]
#  [9 8 7]]

print(arr[::-2, ::-2])
# [[9 7]
#  [3 1]]

切片还可以包括省略号 ... ,足够多的冒号可以构建完整的索引列表。

比如,如果 x 是 5 维数组,对 x 数组进行切片:

  • x[1, 2, ...] 等于 x[1, 2, :, :, :]
  • x[..., 3] 等于 x[:, :, :, :, 3]
  • x[2, ..., 3, :] 等于 x[2, :, :, 5, :]

三维数组切片:文章来源地址https://www.toymoban.com/news/detail-549110.html

import numpy as np

arr = np.random.randint(5, 10, size=(2, 3, 4))
print(arr)
# [[[7 5 5 9]
#   [8 7 9 7]
#   [6 9 7 8]]
#
#  [[8 5 7 7]
#   [9 6 8 6]
#   [7 8 6 5]]]

print(arr[1, ...])
# [[8 5 7 7]
#  [9 6 8 6]
#  [7 8 6 5]]

print(arr[..., 2])
# [[5 9 7]
#  [7 8 6]]

print(arr[0, ..., 1])
# [5 7 9]

print(arr[0][1])
# [8 7 9 7]

print(arr[1][1][1])
# 6

到了这里,关于【Python爬虫与数据分析】NumPy初阶——数组创建与访问的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python数据分析】数据分析之numpy基础

    实验环境:建立在Python3的基础之上 numpy提供了一种数据类型,提供了数据分析的运算基础,安装方式 导入numpy到python项目 本文以案例的方式展示numpy的基本语法,没有介绍语法的细枝末节,笔者认为通过查阅案例就能掌握基本用法。 numpy数组的基本概念 numpy默认所有元素具有

    2024年02月10日
    浏览(30)
  • [数据分析大全]基于Python的数据分析大全——Numpy基础

    NumPy 的全称为 Numeric Python,它是 Python 的第三方扩展包,主要用来计算、处理一维或多维数组。   步入8月了,7月时因为项目所需,自学了 深度学习 相关的内容,现在 已经把项目所需要的神经网络框架搭建起来了,输入输出也都归一化了,模拟误差也加上了,图像的参数

    2024年02月14日
    浏览(45)
  • 数据分析-python学习 (1)numpy相关

    内容为:https://juejin.cn/book/7240731597035864121的学习笔记 numpy数组创建 创建全0数组,正态分布、随机数组等就不说了,提供了相应的方法 通过已有数据创建有两种 arr1=np.array([1,2,3,4,5]) 或者data=np.loadtxt(‘C:/Users/000001_all.csv’,dtype=‘float’,delimiter=‘,’,skiprows=1) (data=np.genfromtxt(‘

    2024年02月13日
    浏览(31)
  • 【100天精通Python】Day53:Python 数据分析_NumPy数据操作和分析进阶

    目录 1. 广播  2 文件输入和输出 3 随机数生成 4 线性代数操作  5 进阶操作

    2024年02月09日
    浏览(41)
  • 【Python数据分析】numpy库的使用-上篇

    NumPy是一个用于科学计算的Python库,它提供了高性能的多维数组对象和用于处理这些数组的各种工具。NumPy的名称来自于“ Numerical Python ”的缩写。 NumPy的主要功能包括: 多维数组对象:NumPy提供了多维数组对象,称为 ndarray ,它是一个由同类型数据组成的表格。 ndarray 可以包

    2024年02月06日
    浏览(31)
  • 银行营销数据分析---Python(numpy、pandas、matplotlib)

    数据来源:kaggle银行营销数据 工具:Python、Jupyter Notebook 本项目采取的是kaggle银行营销的数据源,主要是预测客户是否会订购银行的产品,但是,这次我将 使用numpy、pandas、matplotlib数据分析三件套,基于源数据,深入分析影响银行三大业务—存款、贷款、营销产品的因素 ,

    2024年02月07日
    浏览(44)
  • python-数据分析-numpy、pandas、matplotlib的常用方法

    输出方式不同 里面包含的元素类型 使用 索引/切片 访问ndarray元素 切片 左闭右开 np.array(list) np.arange() np.random.randn() - - - 服从标准正态分布- - - 数学期望 μ - - - 标准方差 s 使用matplotlib.pyplot模块验证标准正态分布 np.random.randint(起始数,终止数(行,列)) 数据分析 - - - 数据清洗

    2024年02月10日
    浏览(38)
  • python数据分析学习笔记之matplotlib、numpy、pandas

    为了学习机器学习,在此先学习以下数据分析的matplotlib,numpy,pandas,主要是为自己的学习做个记录,如有不会的可以随时查阅。希望大家可以一起学习共同进步,我们最终都可以说:功不唐捐,玉汝于成。就算遇到困难也不要气馁,大声说:我不怕,我敏而好学!! 把大量

    2024年02月08日
    浏览(48)
  • Python数据分析:NumPy、Pandas和Matplotlib的使用和实践

    在现代数据分析领域中,Python已成为最受欢迎的编程语言之一。Python通过庞大的社区和出色的库支持,成为了数据科学家和分析师的首选语言。在Python的库中,NumPy、Pandas和Matplotlib是三个最为重要的库,它们分别用于处理数值数组、数据处理和可视化。本文将介绍这三个库的

    2024年02月04日
    浏览(37)
  • 【Python爬虫与数据分析】爬虫selenium工具

    目录 一、selenium工具安装 二、selenium打开浏览器测试 三、无头浏览器 四、元素定位 五、页面滑动 六、按键、填写登录表单 七、页面切换 八、实战爬取当当网书籍数据 Selenium是Web的自动化测试工具,为网站自动化测试而开发,Selenium可以直接运行在浏览器上,它支持所有主

    2024年02月15日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包