NumPy完全指南:从安装到高级应用(CentOS 9环境)

云信安装大师
90
AI 质量分
11 5 月, 2025
3 分钟阅读
0 阅读

NumPy完全指南:从安装到高级应用(CentOS 9环境)

引言

NumPy是Python科学计算的基础库,提供了高性能的多维数组对象和工具。本文将带你从零开始,在CentOS 9系统上完成NumPy的安装,并通过实际示例展示其核心功能和应用场景。

准备工作

系统要求

  • CentOS 9操作系统
  • Python 3.9或更高版本(推荐3.10+)
  • 至少1GB可用磁盘空间

前置知识

  • 基本的Linux命令行操作
  • Python基础语法

第一步:安装Python和pip

代码片段
# 更新系统包
sudo dnf update -y

# 安装Python和pip
sudo dnf install python3 python3-pip -y

# 验证安装
python3 --version
pip3 --version

注意事项
1. CentOS 9默认会安装Python 3.9,如果需要更新版本可以使用dnf module install python39选择其他版本
2. --version命令可以确认是否安装成功

第二步:安装NumPy库

代码片段
# 使用pip安装NumPy(推荐使用虚拟环境)
python3 -m pip install numpy --user

# 验证安装
python3 -c "import numpy; print(numpy.__version__)"

常见问题解决
权限问题:如果遇到权限错误,可以添加--user参数或使用虚拟环境
速度慢:可以使用国内镜像源加速下载,如pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple

NumPy基础使用示例

1. 创建数组

代码片段
import numpy as np

# 创建一维数组
arr1 = np.array([1, 2, 3, 4])
print("一维数组:", arr1)

# 创建二维数组
arr2 = np.array([[1, 2], [3, 4]])
print("二维数组:\n", arr2)

# 使用特殊方法创建数组
zeros_arr = np.zeros((2,3))    # 全0数组
ones_arr = np.ones((2,2))      # 全1数组 
random_arr = np.random.rand(3) # [0,1)随机数数组

print("全0数组:\n", zeros_arr)
print("全1数组:\n", ones_arr)
print("随机数组:", random_arr)

2. 数组运算

代码片段
a = np.array([1,2,3])
b = np.array([4,5,6])

# element-wise运算(逐元素运算)
print("加法:", a + b)    # [5  7  9]
print("乘法:", a * b)    # [4  10  18]
print("平方:", a ** 2)   # [1  4  9]

# dot product(点积)
dot_product = np.dot(a, b)
print("点积:", dot_product) # (1*4 +2*5 +3*6)=32

# broadcasting(广播机制)
c = a + np.array([10])  
print("广播加法:", c)    # [11  12  13]

3. NumPy高级功能示例

a. reshape操作

代码片段
arr = np.arange(12)       # [0,1,...,11]
reshaped = arr.reshape(3,4)
print("reshape结果:\n", reshaped)
"""
[[0  1  2  3]
 [4  5  6  7] 
 [8  9  10  11]]
"""

b. slicing和indexing

代码片段
matrix = np.array([[1,2,3],[4,5,6],[7,8,9]])

# slicing获取子矩阵 
sub_matrix = matrix[0:2,1:3]  
"""
[[2  3]
 [5  6]]
"""

# boolean indexing筛选元素 
bool_idx = matrix >5  
filtered = matrix[bool_idx]  
"""
[6  7  8  9]
"""

c. universal functions (ufunc)

代码片段
x = np.linspace(0,np.pi/2,num=5)
sin_x = np.sin(x)
exp_x = np.exp(x)

print("sin(x):", sin_x)
print("exp(x):", exp_x)

NumPy性能优化技巧

a. vectorization替代循环

代码片段
import time 

size=1000000  

# Python原生列表+循环方式 
start=time.time()
result=[]
for i in range(size):
    result.append(i*i)
end=time.time()
print(f"循环耗时:{end-start:.4f}秒")

# NumPy向量化方式 
start=time.time()
result=np.arange(size)**2 
end=time.time()
print(f"向量化耗时:{end-start:.4f}秒")

性能对比
在测试中,向量化操作通常比循环快10-100倍!

b. memory view避免复制数据

代码片段
large_array=np.random.rand(10000000)

def process_data(data):
    return data*2 + data.mean()

# ❌不好的方式:会创建副本 
result=process_data(large_array.copy())  

# ✅好的方式:使用memory view避免复制 
result=process_data(large_array[:])  

NumPy与机器学习应用示例(线性回归)

代码片段
import matplotlib.pyplot as plt 

# ⭐生成样本数据 
np.random.seed(42)
X=np.random.rand(100)*10  
y=2*X +5 +np.random.normal(scale=2,size=100)

# ⭐计算回归系数 (w=(X^T X)^(-1) X^T y)
X_matrix=np.vstack([X,np.ones(len(X))]).T  
w=np.linalg.inv(X_matrix.T @ X_matrix) @ X_matrix.T @ y 

predicted=X_matrix @ w 

plt.scatter(X,y,c='blue',label='实际值')
plt.plot(X,predicted,c='red',label='预测线')
plt.title('线性回归演示')
plt.xlabel('X')
plt.ylabel('y') 
plt.legend() 
plt.show() 

print(f"回归方程: y={w[0]:.2f}x+{w[1]:.2f}")

CentOS环境下的特殊注意事项

  1. BLAS/LAPACK支持
    对于高性能计算,建议安装优化的数学库:

    “`bash
    sudo dnf install openblas openblas-devel lapack lapack-devel -y

    然后重新编译NumPy以获得最佳性能:

    pip uninstall numpy -y && pip install numpy –no-binary :all:

    验证是否链接了BLAS库:

    “`python
    import numpy as np; print(np.config.show())

    应该能看到类似”openblas”的信息。

    如果遇到编译错误,可以尝试先安装开发工具:

sudo dnf groupinstall “Development Tools” -y

原创 高质量