Numpy 零基础超全入门教程,从安装到矩阵运算一站式学会



前言

在Python数据分析、机器学习、人工智能以及科学计算领域,NumPy 是绝对的基石库。全称Numerical Python,它提供高性能的多维数组对象ndarray,运算速度比Python原生列表快几十甚至上百倍,后续学习Pandas、Matplotlib、机器学习框架都必须先掌握NumPy基础。


一、NumPy 安装

1. pip 安装(推荐)

打开PyCharm终端、CMD或PowerShell,执行国内镜像安装,速度更快:

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

只有安装了 numpy 库,我们才能进行后续的运算。

2. 导入规范

所有NumPy代码标准导入写法,行业统一惯例:

import numpy as np

我们引用numpy库后,把它“重命名”为np,方便我们后续在代码中使用。

二、numpy 核心:ndarray 数组创建

NumPy所有操作都基于ndarray多维数组,常用创建方式如下。

1. 由Python列表转为数组

在python中最常见的数据类型就是列表,但是我们需要转为更有效率的形式。
我们可以观察到,有列表转为数组后,数据的形式改变了,同时数组里没有逗号存在:

import numpy as np

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

输出结果为:

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

这样做的好处将numpy依托底层C语言实现与连续内存存储,运算速度远超原生列表;天生支持一维、二维、多维矩阵结构,可灵活通过reshape变换维度,适配各类矩阵场景;内置完善的线性代数能力,自带点乘、矩阵乘法等运算,无需手动编写复杂逻辑;同时支持向量化批量运算,无需编写for循环就能对全体元素统一计算,代码更简洁高效,也是后续Pandas、数据分析及机器学习学习的必备基础。
上方的代码只是最简单的一维数组,往上还有更高维的数组,那是就将以矩阵的形式展现,但他们本质还是数组。

import numpy as np

ls_2 = [[1,2],[3,4]]
print(ls_2)
a_2 = np.array(ls_2)
print(a_2)

输出结果:
在这里插入图片描述

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

2. 创建特殊的数组

在项目开发中,我们可以根据我们的需要,创建一些特殊的数组,比如全是0的数组、全是1的数组等等等等。

import numpy as np

#创建全为0的数组
a = np.zeros(5)
b = np.zeros((2,2))#(2,2)np.zeros((2,2))#zeros只能接受1个参数,
c = np.zeros((3,2,2))
print(a,'\n',b,'\n',c)
#创建全为1的数组
d = np.ones(5)
e = np.ones((2,2))
f = np.ones((2,2,2))

#创建全为2的数组   矩阵中全部填充指定的数据
g = np.full((2,2,2), 5)

运行结果:

[0. 0. 0. 0. 0.] 
 [[0. 0.]
 [0. 0.]] 
 [[[0. 0.]
  [0. 0.]]

 [[0. 0.]
  [0. 0.]]

 [[0. 0.]
  [0. 0.]]]

3. 数组的降维

对numpy数组做降维非常有必要,高维数组结构层级复杂、不利于数据查看和取值索引,降维后能把多层嵌套的结构摊平成一维或二维,更方便做遍历遍历、切片取值和数据筛选;降维后还能适配大多数数据分析、绘图、模型输入的格式要求,很多算法和函数只接收一维或二维结构,高维数据无法直接使用;同时降维后运算逻辑更简单,避免多维索引出错,简化矩阵运算、批量计算的代码写法,也能配合后续pandas数据转换、数据预处理等操作,让数据处理流程更顺畅、更易维护。

import numpy as np

list1 = [1,2,3,4,5,6,7,8]
v = np.array(list1)
v = v.reshape(2,2,2)
print(v)
v.ndim

#将三维降到二维
r1 = v.reshape(1,8)
print(r1)
r1.ndim

#将高维数据转化为一维
#ravel()
r2 = v.ravel()
print(r2)

#flatten()
r3 = v.flatten()#非常重要,
print(r3)
# flatten方法返回的是原数组的副本,这意味着对返回的一维数组所做的任何修改都不会影响原始的多维数组。
# ravel方法(如果可能)返回的是原始数组的视图,因此对返回的一维数组所做的修改可能会影响原始的多维数组。这是因为ravel只是改变了数组的形状和步长,而没有复制数据。
list1 = [1,2,3,4,5,6,7,8]
v = np.array(list1)
print(v)

三、ndarray 常用核心属性

掌握ndim、shape、size、dtype这几个numpy数组核心属性,就能一眼看懂数组是几维结构、行列形状、元素总个数以及数据类型,快速读懂数组整体结构,为后续维度变换、矩阵运算和数据预处理打下基础。

a = np.arange(4).reshape(2,2)
print(a)

print("维度个数:", a.ndim)    # 几维数组
print("数组形状:", a.shape)  # (行数,列数)
print("元素总个数:", a.size)
print("元素数据类型:", a.dtype)

其中第一行代码就是说在0~4不包括4的范围取四个元素,且生成2*2的数组。

运行结果:

[[0 1]
 [2 3]]
维度个数: 2
数组形状: (2, 2)
元素总个数: 4
元素数据类型: int32

四、三维数组元素的选取与修改

三维数组按 块、行、列 三层索引取值,格式 [块,行,列];既能精准选取单个元素、整行、整块,也能直接通过索引重新赋值修改元素,操作逻辑和一维、二维数组完全贯通,只需要多一层块的索引即可。
代码都可以直接运行,可以在自己的pycharm中运行试验。

import numpy as np

array1 = np.arange(48).reshape(2,4,6)
print(array1)

#选取某个元素
#首先确定选取哪一个二维数组
a = array1[1,0,0]

#选取某行元素
b = array1[0,1,:]

#选取某些行元素
c = array1[0,1:3,:]
d = array1[0,[1,3],:]

#选取某列
e = array1[1,:,1]

#选取某些列
f = array1[1,:,1:4]
g = array1[1,:,[1,4]]

#修改
array1[1,0,0]=100
print(array1)


v = np.array([array1,array1,array1,array1])
a= v[2,1,2: ,1:3]
print(a)

五、数组的算法运算

数组之间的运算方式,基本都是两个格式、维度形状完全一致的numpy数组,在一一对应的相同位置逐个元素做加减乘除等运算,不用循环遍历,numpy会自动按位置匹配批量计算,这也是数组运算简洁高效的核心原因。

import numpy as np

array1 = np.arange(1,5,1).reshape(2,2)
array2 = 2*array1
print(array1)
print(array2)

#数组的加法【对应位置的元素求和】
print(array1 + array2)#前提 矩阵shape必须一致

#数组的减法[对应位置元素相减]
print(array1 - array2)

#数组的乘法【对应位置相乘】
print(array1 * array2)

#数组的除法[对应位置相除]
print(array1 / array2)

#数组的取余(%)
print(array2 % array1)

#数组的取整
print(array1 // array2)

运行结果:

[[1 2]
 [3 4]]
[[2 4]
 [6 8]]
[[ 3  6]
 [ 9 12]]
[[-1 -2]
 [-3 -4]]
[[ 2  8]
 [18 32]]
[[0.5 0.5]
 [0.5 0.5]]
[[0 0]
 [0 0]]
[[0 0]
 [0 0]]

六、常见报错解决方案

1. ModuleNotFoundError: No module named ‘numpy’

原因:未安装NumPy
解决:执行 pip install numpy 清华镜像 安装即可,同理pandas、matplotlib都是缺少库导致。

2. reshape 报错

报错原因:进行 reshape 重塑数组形状时,新维度相乘后的元素总个数,和原数组元素总数不相等,无法分配结构,直接触发报错。
解决办法:设置新维度时,必须保证新各维度数值的乘积 = 原数组元素总个数,只要总数对上,就能正常完成维度重塑。

3. 点乘形状不匹配报错

原因:numpy数组进行点乘是按对应位置逐元素运算,要求两个数组行列、维度结构完全一致,若形状、行列数不统一,就无法一一对应匹配元素,直接触发报错。
解决:提前通过reshape调整数组维度与行列结构,把两个数组改成相同形状后,再进行点乘运算。

总结

围绕 numpy 零基础入门展开,涵盖 numpy 安装方法与导入规范,详细讲解了 ndarray 数组的多种创建方式(列表转数组、特殊数组创建)、核心属性(ndim、shape、size、dtype)、数组的降维与三维数组的元素选取和修改,以及数组间的对应位置运算规则,同时整理了安装、reshape、点乘相关的常见报错及解决办法,全程附带可直接运行的代码,帮助新手快速掌握 numpy 基础,numpy不用死记硬背,多敲代码多练习,就可以应对日常学习和工作中的基本使用场景。
如果这篇文章对你有帮助,请点个赞和收藏,博主会继续努力更新文章的。

Logo

更多推荐