NumPy 入门,从安装到第一个数组搞定核心基础

如果你刚接触 Python 数据分析,一定听过「NumPy」这个名字。作为 Python 科学计算的基石,它几乎是所有数据处理、机器学习、科学研究的必备工具。

一、为什么选择 NumPy?

举个例子,如果要计算一个包含 100 万个元素的列表中每个元素的平方,用 Python 列表和 NumPy 分别需要多久?

我们用代码实测一下(可以自己复制运行):

import time

import numpy as np

# 创建一个包含100万个元素的列表

python_list = list(range(1, 1000001))

# 转换为NumPy数组

numpy_arr = np.array(python_list)

# 测试列表循环计算平方的时间

start = time.time()

python_result = [x**2 for x in python_list]

print(f"列表耗时:{time.time() - start:.4f}秒")

# 测试NumPy数组矢量化计算的时间

start = time.time()

numpy_result = numpy_arr **2

print(f"NumPy耗时:{time.time() - start:.4f}秒")

运行结果是:

Python耗时:0.0872秒

NumPy耗时:0.0005秒

差距达 174 倍(100 万元素计算),数据量越大,NumPy 优势越明显。

因 Python 列表是动态类型集合,需逐个遍历;而 NumPy 的 ndarray 为同构数据容器,基于 C 实现,支持整组运算,效率有明显差异。

加之其丰富的数学函数,使其成为数据分析基础。

二、安装 NumPy:3 步搞定环境配置

1. 安装方式

用 pip 管理包:

pip install numpy

如果安装速度慢,直接复制下面代码在cmd中输入,后面网址为清华园镜像

pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple

2. 验证安装是否成功

打开 命令行,输入:

pip show numpy

如果没有报错,且能显示版本号,说明安装成功。

三、NumPy 核心:理解 ndarray 数组

NumPy 的一切操作都围绕「ndarray」(N-dimensional array,N 维数组)展开。

1. ndarray 的 3 个核心属性

每个 ndarray 都有 3 个关键属性:

ndim :维度数量。

shape :各维度的大小(如 (3,4) 表示 3 行 4 列的 2 维数组)。

dtype **:数组中元素的数据类型(如 int32、float64)。

2. 为什么 dtype 很重要?

和 Python 列表不同,ndarray 中的元素必须是同一种数据类型。指定 dtype 有两个好处:

--节省内存 :比如存储整数时,int32(4 字节)比默认的 int64(8 字节)节省一半空间。

--避免计算错误:比如 float32 和 float64 的精度不同,可能影响科学计算结果。

常用 dtype 包括:int32、int64、float32、float64、bool 等。

四、快速上手:创建数组的 3 种常用方法

1. 从 Python 列表创建

用 np.array() 函数,直接把列表转换成 ndarray:

import numpy as np

# 1 维数组(向量)

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

print(arr1) # 输出:[1 2 3 4]

print("ndim:", arr1.ndim) # 输出:1

print("shape:", arr1.shape) # 输出:(4,)

print("dtype:", arr1.dtype) # 输出:int64(默认整数类型)

# 2 维数组(矩阵)

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

print(arr2)

# 输出:

# [[1 2 3]

# [4 5 6]]

print("shape:", arr2.shape) # 输出:(2, 3)(2 行 3 列)

创建时可指定 dtype,比如强制为浮点型:

arr = np.array([1, 2, 3], dtype=np.float32)

print(arr.dtype) # 输出:float32

2. 创建全 0 或全 1 数组

用 np.zeros() 或 np.ones(),指定 shape 即可:

# 创建 2 行 3 列的全 0 数组

zeros_arr = np.zeros((2, 3))

print(zeros_arr)

# [[0. 0. 0.]

# [0. 0. 0.]]

# 创建 3 个元素的全 1 数组(1 维)

ones_arr = np.ones(3, dtype=int) # 强制为整数

print(ones_arr) # 输出:[1 1 1]

3. 创建连续序列数组(类似 range)

用 np.arange(),用法和 Python 的 range 类似,但返回的是 ndarray对象:

五、ndarray 基础操作:索引、切片与修改

和 Python 列表类似,ndarray 也支持索引(取单个元素)和切片(取部分元素),但用法更灵活。

1. 1 维数组操作(和列表几乎一样)

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

# 取索引为 3 的元素(第 4 个元素,从 0 开始计数)

print(arr[3]) # 输出:3

# 切片:取索引 2 到 5(不包含 5)的元素

print(arr[2:5]) # 输出:[2 3 4]

# 修改元素值

arr[4] = 100

print(arr) # 输出:[ 0 1 2 3 100 5 6 7 8 9]

2. 2 维数组操作(矩阵思维)

2 维数组的索引需要用 [行, 列] 的形式(注意是逗号分隔,不是 [行][列]):

arr = np.array([[1, 2, 3],

                [4, 5, 6],

                [7, 8, 9]]) # shape=(3,3)

# 取第 1 行(索引 0)的第 2 列(索引 1)元素

print(arr[0, 1]) # 输出:2

# 取第 2 行(索引 1)的所有元素

print(arr[1, :]) # 输出:[4 5 6](`:` 表示取所有列)

# 取所有行的第 0 列元素

print(arr[:, 0]) # 输出:[1 4 7]

# 切片:取前 2 行,前 2 列

print(arr[:2, :2])

# 输出:

# [[1 2]

# [4 5]]

# 修改元素:将第 2 行第 2 列(索引 2,2)改为 100

arr[2, 2] = 100

print(arr)

# 输出:

# [[ 1 2 3]

# [ 4 5 6]

# [ 7 8 100]]

六、实战小案例:用 NumPy 处理班级成绩

假设你是老师,手里有一个班级 5 名学生的 3 门成绩(数学、语文、英语),用 NumPy 快速计算平均分、最高分等统计量。

步骤 1:创建成绩数组

# 5 名学生,3 门成绩:[[数学], [语文], [英语]]

scores = np.array([

[90, 85, 92], # 学生 1

[78, 90, 88], # 学生 2

[95, 89, 96], # 学生 3

[82, 76, 80], # 学生 4

[88, 92, 85] # 学生 5

])

print("成绩矩阵 shape:", scores.shape) # 输出:(5, 3)(5 行 3 列)

步骤 2:计算统计量

# 1. 计算每门课的平均分(按列求平均)

subject_avg = scores.mean(axis=0) # axis=0 表示按照每列计算(顺着行)

print("数学平均分:", subject_avg[0]) # 输出:86.6

print("语文平均分:", subject_avg[1]) # 输出:86.4

print("英语平均分:", subject_avg[2]) # 输出:88.2

# 2. 计算每个学生的总分(按行求和)

student_total = scores.sum(axis=1) # axis=1 表示按每行计算(顺着列)

print("学生总分:", student_total) # 输出:[267 256 280 238 265]

# 3. 找出英语最高分(第 2 列,索引 2)

english_max = scores[:, 2].max()

print("英语最高分:", english_max) # 输出:96

axis 参数控制计算方向 ——axis=0 是「列方向」(跨所有行),axis=1 是「行方向」(跨所有列)。

七、总结

1.为什么用 NumPy ?比 Python 列表快 100+ 倍,支持向量运算和批量操作。

2. 核心结构 :ndarray 数组,用 ndim(维度)、shape(形状)、dtype(数据类型)描述。

3. 常用创建方法 np.array()(从列表创建)、np.zeros()(全 0)、np.arange()(连续序列)。

4. 基础操作 :索引 [i,j]、切片 [start:end]、修改值直接赋值。

5. 实战:一行代码完成统计计算(如 mean()、sum()),用axis 控制方向。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值