Python数据分析(二)NumPy基础

@NumPy基础

一、认识NumPy

1、NumPy 的全称是“ Numeric Python”,是 Python 的第三方扩展包,主要用来计算、处理一维或多维数组。
2、在数组算术计算方面, NumPy 提供了大量的数学函数。NumPy 的底层主要用 C语言编写,因此它能够高速地执行数值计算。NumPy 还提供了多种数据结构,这些数据结构能够非常契合的应用在数组和矩阵的运算上。

1.1 NumPy特点

NumPy 可以很便捷高效地处理大量数据,使用 NumPy 做数据处理的优点如下:
(1)NumPy 是 Python 科学计算基础库;
(2)NumPy 可以对数组进行高效的数学运算;
(3)NumPy 的 ndarray 对象可以用来构建多维数组;
(4)NumPy 提供了线性代数,以及随机数生成的内置函数。
例如,分别使用纯python和NumPy实现两个数组中对应的元素相加的过程。

# 纯python实现
def python_num(num):
    num1 = [i ** 2 for i in range(num)]#利用for循环创建一个数组 (获取0到num-1之间所有数的平方)
    num2 = [i ** 3 for i in range(num)]#利用for循环创建一个数组 (获取0到num-1之间所有数的3次方)
    number = []
    for i in range(num):
        number.append(num1[i] + num2[i])#计算num1数组和num2数组对应元素的和并将所求和依次存放到新数组number中
    
    return number
# numpy实现
def numpy_num(num):
    num1 = np.arange(num) ** 2
    num2 = np.arange(num) ** 3
    return num1 + num2

根据以上两个代码块可知,NumPy 的实现过程更为简洁,效率更高。

1.2 下载与安装

1、windows安装过程
pip install numpy1.22.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
2、MacOS安装
pip3 install numpy
1.22.2 scipy matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

二、NumPy基本使用

2.1 创建ndarray对象

通过 NumPy 的内置函数 array() 可以创建 ndarray 对象,其语法格式如下:

import numpy
numpy.array(object, dtype=None, copy=True, order=None,ndmin=0)

在这里插入图片描述
1、创建一维数组

import numpy
num_data = numpy.array([1,2,3])
num_data = numpy.array(range(10)) 可迭代对象
# num_data = numpy.array([num**2 for num in range(10)])
print(num_data)

print(type(num_data))

2、创建二维数组

import numpy
# 将多个一维数组堆叠起来
num_data = numpy.array([[1,2,3], [4,5,6]])
print(num_data)

print(type(num_data))

3、改变数组元素的数据类型

import numpy
num_data=numpy.array([2,4,6,8], dtype="str")
print(num_data)

4、查看数组维度

import numpy
num_data = numpy.array([[1, 2, 3, 4], [4, 5, 6, 7], [9, 10, 11, 23]]) 
print(num_data.ndim)

2.2 数组形状

数组的形状指的是多维数组的行数和列数。Numpy 模块提供 reshape() 函数可以改变多维数组行数和列数,从而达到数组变维的目的。因此数组变维即对数组形状的重塑 。

import numpy
num_data = numpy.array([[1, 2, 3, 4], [4, 5, 6, 7], [9, 10, 11, 23]])
print(f"原数组:\n{num_data}")

new_num_data = num_data.reshape(4, 3)
print(f"新数组:\n{new_num_data}")

2.3 创建区间数组

区间数组是指数组元素的取值位于某个范围内,并且数组元素之间可能会呈现某种规律,比如等比数列、递增、递减等。
1、arange()

在 NumPy 中,您可以使用 arange() 来创建给定数值范围的数组。

import numpy
numpy.arange(start, stop, step, dtype)
  • start 起始值,默认是 0。
  • stop 终止值,注意生成的数组元素值不包含终止值。
  • step 步长,默认为 1。
  • dtype 可选参数,指定 ndarray 数组的数据类型。
import numpy as np
array_range = np.arange(1, 10, 2)
print(array_range)

2、 linspace()

linspace()函数表示在指定的数值区间内,返回均匀间隔的一维等差数组,默认均分 50 份。

import numpy as np
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
  • start:代表数值区间的起始值;
  • stop:代表数值区间的终止值;
  • num:表示数值区间内要生成多少个均匀的样本。默认值为 50;
  • endpoint:默认为 True,表示数列包含 stop 终止值,反之不包含;
  • retstep:默认为 False,表示生成的数组中会显示公差项,反之不显示;
  • dtype:代表数组元素值的数据类型。
import numpy as np
arr_lin = np.linspace(10, 20, 5, endpoint=False, dtype=int, retstep=True)
print("数组数值范围 :", arr_lin)

3、logspace()

logspace()函数同样返回一个ndarray数组,它用于创建等比数组。

import numpy as np
np.logspace(start, stop, num=50, endpoint=True, `在这里插入代码片`base=10.0, dtype=None)
  • start 序列的起始值:basestart。
  • stop 序列的终止值:basestop。
  • num 数值范围区间内样本数量,默认为 50。
  • endpoint 默认为 True 包含终止值,反之不包含。
  • base 对数函数的 log 底数,默认为10。
  • dtype 可选参数,指定 ndarray 数组的数据类型。
import numpy as np
arr_log = np.logspace(1, 10, num=10, dtype=int, base=3)
print(arr_log)

4、random

import numpy as np
data = np.random.randint(low=5,high=10,size=(30,8))
print(data)
  • low:代表随机数值的起始值(可以取到)
  • high:代表随机数值的结束值(无法取到)
  • size:代表随机数组的形状(前面是行,后面是列)

三、索引和切片

在 NumPy 中,如果想要访问或修改数组中的元素,可以采用索引或切片的方式。比如使用从 0 开始的索引依次访问数组中的元素,这点与 Python 的 list 列表相同。NumPy 提供了多种类型的索引方式,常用方式有两种:基本切片与高级索引。

3.1 基本切片

NumPy 内置函数 slice() 可以用来构造切片对象,该函数需要传递三个参数值分别是 start(起始索引)、stop(终止索引) 和 step(步长) ,通过它可以实现从原数组的上切割出一个新数组。

import numpy as np
arr_data = np.arange(10)

#从索引2开始到索引9停止,步长为3
s = slice(2, 9, 3)
print(arr_data[s])
  • 也可以通过冒号来分割切片参数,最终也能获得相同结果
import numpy as np
arr_data = np.arange(10)
new_data = arr_data[2:9:2]
print(new_data)

3.2 多维数组切片

  • 多维数组切片操作,实例如下:
import numpy as np

arr_data = np.array([[1, 2, 3], [3, 4, 5], [4, 5, 6]])
print(arr_data)
# 从[1:]索引处开始切割
print(arr_data[1:])
  • 切片还可以使用省略号“…”,如果在行位置使用省略号,那么返回值将包含所有行元素,反之,则包含所有列元素。
import numpy as np

# 创建a数组
arr_num = np.array([[1, 2, 3], [3, 4, 5], [4, 5, 6]])
# 返回数组的第二列
print(arr_num[..., 1])
#print(arr_num[:, 1])
# 返回数组的第二行
print(arr_num[1, ...])
# 返回第二列后的所有项
print(arr_num[..., 1:])

3.3 高级索引

在 NumPy 中还可以使用高级索引方式,比如整数数组索引、布尔索引以及花式索引。

1、 整数数组索引

  • 整数数组索引可以选择数组中的任意一个元素。
import numpy as np

# 创建二维数组
arr_data = np.array([[1, 2], [3, 4], [5, 6]])
# [0,1,2]代表行索引;[0,1,0]代表列索引
new_data = arr_data[[0, 1, 2], [0, 1, 0]]
print(new_data)
  • 获取了 4*3 数组中的四个角上元素,它们对应的行索引是 [0,0] 和 [3,3],列索引是 [0,2] 和 [0,2]。
import numpy as np

arr_data = np.array([
              [0, 1, 2],
              [3, 4, 5],
              [6, 7, 8],
              [9, 10, 11]])
# 行索引
width_data = np.array([[0, 0], [3, 3]])
# 列索引
height_data = np.array([[0, 2], [0, 2]])

new_data = arr_data[width_data, height_data]
print(new_data)
  • 也可以将切片所使用的:或省略号...与整数数组索引结合使用
# -*- coding:utf-8 -*-
import numpy as np

arr_num = np.array([
              [0, 1, 2],
              [3, 4, 5],
              [6, 7, 8],
              [9, 10, 11]])
# 对行列分别进行切片
one_data = arr_num[1:4, 1:3]
print(one_data)
# 行使用基础索引,对列使用高级索引
two_data = arr_num[1:4, [1, 2]]
# 显示切片后结果
print(two_data)
# # 对行使用省略号
three_data = arr_num[..., 1:3]
print(three_data)

2、 布尔数组索引

  • 当输出的结果需要经过布尔运算(如比较运算)时,此时会使用到另一种高级索引方式,即布尔数组索引。
# 返回结果大于六的数字数组
import numpy as np

arr_data = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]])
print(arr_data)
print(arr_data[arr_data > 6])
  • 我们可以使用补码运算符来去除非数字元素
import numpy as np

arr_data = np.array([np.nan, 1, 2, np.nan, 3, 4, 5])
# np.nan是一个float类型的数据,表示不是一个数字
print(arr_data)
# np.isnan(x) 可以判断x是否为空值
print(arr_data[~np.isnan(arr_data)])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值