Python 商务数据分析—— NumPy 学习笔记Ⅰ

发布于:2025-06-26 ⋅ 阅读:(15) ⋅ 点赞:(0)

一、NumPy 简介

1.1 NumPy 特性

  • 高性能科学计算库:专为处理多维数组设计,底层用 C 语言实现,运算速度远超 Python 原生列表。
  • 矢量运算:支持批量数据操作,避免显式循环,代码更简洁高效。
  • 广播机制:自动处理不同形状数组间的运算。
  • 丰富函数库:包含线性代数、傅里叶变换、随机数等功能。

1.2 应用场景

  • 数据分析:处理大规模结构化数据。
  • 机器学习:作为 TensorFlow/PyTorch 等框架的底层支持。
  • 科学计算:物理模拟、统计学分析。
  • 图像处理:多维数组表示像素数据。

1.3 安装与导入

pip install numpy

import numpy as np

二、NumPy 基础 —— 数组对象

2.1 数组与列表对比

特性

NumPy 数组 (ndarray)

Python 列表 (list)

数据类型

元素类型必须一致

可包含任意类型元素

内存存储

连续内存空间,访问速度快

非连续存储,访问较慢

运算效率

支持向量化运算,速度快

需显式循环,速度慢

维度支持

支持 n 维数组

仅支持一维结构

2.2 创建数组的四种方式

方法

语法

示例

np.array()

从列表 / 元组创建

arr1 = np.array([10, 20, 30, 40])

np.arange()

生成等差数列

arr2 = np.arange(0, 10, 2)

np.random

生成随机数组

arr3 = np.random.random((2, 3))

特殊函数

zeros/ones/full/eye

arr_zeros = np.zeros((3, 3))

代码示例
通过np.array创建数组
import numpy as np
a = np.array([1, 2, 3, 4])
print(a)  # 输出结果: [1 2 3 4]
通过np.arange创建数组
import numpy as np
a = np.arange(0, 10, 2)  # 创建0-10,步数为2的数组
print(a)  # 输出结果: [0 2 4 6 8]
通过np.random.random创建数组
import numpy as np
a = np.random.random((2, 3))
print(a)  # 输出类似于: [[0.04631855 0.21257259 0.73199394]
                     #          [0.59865848 0.15601864 0.15599452]]
通过特殊函数创建数组
import numpy as np
array_zeros = np.zeros((3, 3))  # 3行3列全零数组
array_ones = np.ones((4, 4))   # 4行4列全一数组
array_full = np.full((2, 3), 9)  # 值为9的2行3列数组
array_eye = np.eye(4)  # 生成一个在斜方形上元素为1,其他元素都为0的4行4列矩阵
print(array_zeros)  # 输出: [[0. 0. 0.]
                     #               [0. 0. 0.]
                     #               [0. 0. 0.]]
print(array_ones)  # 输出: [[1. 1. 1. 1.]
                     #               [1. 1. 1. 1.]
                     #               [1. 1. 1. 1.]
                     #               [1. 1. 1. 1.]]
print(array_full)  # 输出: [[9 9 9]
                     #                [9 9 9]]
print(array_eye)  # 输出: [[1. 0. 0. 0.]
                     #               [0. 1. 0. 0.]
                     #               [0. 0. 1. 0.]
                     #               [0. 0. 0. 1.]]

三、数组数据类型

3.1 核心数据类型

类型

描述

标识符

示例

bool

布尔值

b

True/False

int8

1 字节整数

i1

-128~127

int32

4 字节整数

i4

-2147483648~2147483647

float16

半精度浮点数

f2

16 位,精度约 3 位小数

float64

双精度浮点数

f8

标准浮点数

object

Python 对象

O

存储类实例等

3.2 类型操作

查询数据类型

import numpy as np

class Person:  # 定义Person类
    def __init__(self, name, age):
        self.name = name
        self.age = age

zs = Person('张三', 18)  # 产生对象
ls = Person('李四', 20)
d = np.array([zs, ls])
print(d)  # 输出: [__main__.Person object at 0x00000176CB4F2208 __main__.Person object at 0x00000176CB4F2288]
print(d.dtype)  # 输出: dtype('O')

创建数组指定数据类型

import numpy as np
a = np.array([1, 2, 3, 4, 5], dtype='int32')  # 使用dtype指定创建数组的数据类型
print(a)  # 输出结果: [1 2 3 4 5]
print(a.dtype)  # 输出: int32

修改数据类型

import numpy as np
a = np.array([1, 2, 3, 4, 5])
f = a.astype('float16')  # 使用astype改变数组的数据类型
print(f.dtype)  # 输出结果: float16

四、多维数组操作

4.1 维度与形状

数组

维度 (ndim)

形状 (shape)

含义

[1,2,3]

1

(3,)

一维数组,3 个元素

[[1,2],[3,4]]

2

(2,2)

2 行 2 列二维数组

[[[1,2],[3,4]],[[5,6],[7,8]]]

3

(2,2,2)

3 维数组,2 个 2x2 矩阵

4.2 基本操作

数组维度查询

import numpy as np
a1 = np.array([1, 2, 3])
a2 = np.array([[1, 2, 3], [4, 5, 6]])
a3 = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print(a1.ndim)  # 输出: 1
print(a2.ndim)  # 输出: 2
print(a3.ndim)  # 输出: 3

数组形状查询

import numpy as np
a1 = np.array([1, 2, 3])
a2 = np.array([[1, 2, 3], [4, 5, 6]])
a3 = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print(a1.shape)  # 输出: (3,)
print(a2.shape)  # 输出: (2, 3)
print(a3.shape)  # 输出: (2, 2, 3)

修改数组形状

import numpy as np
a1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
a2 = a1.reshape((2, 6))  # reshape是将数组转换成指定的形状,然后返回转换后的结果,原数组的形状不会发生改变
print(a2)  # 输出: [[ 1  2  3  4  5  6]
             #          [ 7  8  9 10 11 12]]
print(a1.shape)  # 输出: (4, 3)
a1.resize((4, 3))  # resize是将数组转换成指定的形状,会直接修改数组本身,并且不会返回任何值
print(a1)  # 输出: [[1 2 3]
            #          [4 5 6]
            #          [7 8 9]
            #          [10 11 12]]

通过特殊函数创建数组

import numpy as np
array_zeros = np.zeros((3, 3))  # 3行3列全零数组
array_ones = np.ones((4, 4))   # 4行4列全一数组
array_full = np.full((2, 3), 9)  # 值为9的2行3列数组
array_eye = np.eye(4)  # 生成一个在斜方形上元素为1,其他元素都为0的4行4列矩阵
print(array_zeros)  # 输出: [[0. 0. 0.]
                     #               [0. 0. 0.]
                     #               [0. 0. 0.]]
print(array_ones)  # 输出: [[1. 1. 1. 1.]
                     #               [1. 1. 1. 1.]
                     #               [1. 1. 1. 1.]
                     #               [1. 1. 1. 1.]]
print(array_full)  # 输出: [[9 9 9]
                     #                [9 9 9]]
print(array_eye)  # 输出: [[1. 0. 0. 0.]
                     #               [0. 1. 0. 0.]
                     #               [0. 0. 1. 0.]
                     #               [0. 0. 0. 1.]]

4.3 素组索引

下标索引

import numpy as np
a = np.arange(6)  # 一维数组
print(a)  # 输出: [0 1 2 3 4 5]
print(a[2])  # 输出: 2
print(a[-2])  # 输出: 4(从后往前数第2个)

a = np.arange(9).reshape(3, 3)  # 二维数组
print(a)  # 输出: [[0 1 2]
           #          [3 4 5]
           #          [6 7 8]]
print(a[0][1])  # 输出: 1
print(a[0, 1])  # 输出: 1

切片索引

import numpy as np
a = np.arange(6)  # 一维数组
print(a)  # 输出: [0 1 2 3 4 5]
print(a[1:5])  # 输出: [1 2 3 4]
print(a[1:5:2])  # 输出: [1 3]
print(a[::2])  # 输出: [0 2 4]
print(a[::-1])  # 输出: [5 4 3 2 1 0]

a = np.arange(9).reshape(3, 3)  # 二维数组
print(a)  # 输出: [[0 1 2]
           #          [3 4 5]
           #          [6 7 8]]
print(a[1:3, 1:2])  # 输出: [[4]
                     #               [7]]
print(a[1, :])  # 输出: [3 4 5]
print(a[1, ...])  # 输出: [3 4 5]
print(a[:, 1])  # 输出: [1 4 7]

花式索引

import numpy as np
a = np.arange(6)  # 一维数组
print(a)  # 输出: [0 1 2 3 4 5]
print(a[[1, 2, 5]])  # 输出: [1 2 5]
print(a[np.array([(0, 1, 3), (1, 4, 5)])])  # 输出: [[0 1 3]
                                                #                [1 4 5]]

a = np.arange(9).reshape(3, 3)  # 二维数组
print(a)  # 输出: [[0 1 2]
           #          [3 4 5]
           #          [6 7 8]]
print(a[[1, 0]])  # 输出: [[3 4 5]
                   #                [0 1 2]]
print(a[[0, 2], 1])  # 输出: [1 7]
print(a[np.ix_([0, 1], [0, 1])])  # 输出: [[0 1]
                                   #                [3 4]]

布尔索引

import numpy as np
a = np.arange(6)  # 一维数组
print(a)  # 输出: [0 1 2 3 4 5]
print(a > 3)  # 输出: [False False False False  True  True]
print(a[a > 3])  # 输出: [4 5]

a = np.arange(9).reshape(3, 3)  # 二维数组
print(a)  # 输出: [[0 1 2]
           #          [3 4 5]
           #          [6 7 8]]
print(a > 3)  # 输出: [[False False False]
               #               [False  True  True]
               #               [ True  True  True]]
print(a[a > 3])  # 输出: [4 5 6 7 8]


网站公告

今日签到

点亮在社区的每一天
去签到