Python关于numpy的基础知识数组的升维
在 Python 数据处理中,numpy 是常用的科学计算库,数组操作是其核心内容之一。下面通过代码示例,展示如何从 Python 自带列表构建 numpy 一维数组,再进一步升维构建二维数组。\
import numpy as np# 一维数组构建:从 Python 列表到 numpy 一维数组
list1 = [1, 2, 3, 4, 5] # Python 自带的列表数据类型
print("Python 列表 list1:", list1)
v = np.array(list1) # 转换为 numpy 一维数组
print("numpy 一维数组 v:", v)# 二维数组构建:基于一维数组升维,由多个一维数组构成二维数组
m = np.array([list1, list1, list1]) # 用多个一维列表构建 numpy 二维数组
print("numpy 二维数组 m:", m)
代码先利用 np.array()
将 Python 列表转为 numpy 一维数组,接着通过传入包含多个一维列表(这里是重复的 list1
)的列表,构建出二维 numpy 数组,清晰呈现了 numpy 数组从一维到二维的升维构建过程,帮助理解 numpy 数组基础且重要的 “升维” 操作逻辑 。
图形最多能展示的维度就是两维,所以更高维度的内容就不展现了。
数组的属性
"""
数组的基本属性
"""# 一维数组
a = v.shape # 查询数组的形状
b = v.ndim # 查询数组的维度
c = v.size # 查询数组中数据个数
print(type(v))
d = v.dtype # 查询数组中的元素类型,int8, int16, int32, int64: 表示不同长度的有符号整数。
一、数组的形状(shape
)
v.shape
用于获取数组的形状信息,返回一个元组。对于一维数组 v
,运行后得到的结果是 (5,)
,元组中的数字 5
表示该一维数组有 5
个元素,形象地描述了数组在各个维度上的长度分布,后续处理二维、三维等多维数组时,能清晰知晓行、列等维度的元素数量 。比如二维数组 m = np.array([[1,2],[3,4]])
,m.shape
会返回 (2, 2)
,代表 2 行 2 列 。
二、数组的维度(ndim
)
v.ndim
用来查询数组的维度。对于一维数组 v
,结果是 1
,说明它是一维结构;若换成二维数组,ndim
结果为 2
,三维数组则返回 3
,以此类推。这能让我们快速判断数组的 “空间” 层次,像处理图像数据时,三维数组可能代表高度、宽度、通道数,通过 ndim
可初步识别数据结构 。
三、数组中数据个数(size
)
v.size
会返回数组中元素的总个数。对于 v = np.array([1,2,3,4,5])
,size
结果是 5
,就是数组里元素的数量;要是二维数组 m = np.array([[1,2],[3,4]])
,m.size
为 4
(2 行 ×2 列 )。在统计数据总量、计算全局指标(如所有元素的平均值,可结合 sum
与 size
计算 )时,这个属性很实用 。
四、数组中的元素类型(dtype
)
v.dtype
用于查询数组中元素的类型。对于上面定义的 v
,元素是整数,默认情况下 numpy
会识别为 int32
或 int64
(取决于环境 )。numpy
支持丰富的数据类型,像 int8
(小范围有符号整数 )、float32
(单精度浮点数 )、float64
(双精度浮点数 )等。明确元素类型,一方面能帮我们了解数据存储方式(不同类型占用内存不同 ),另一方面可避免因类型不匹配导致的计算错误,比如参与运算的数组元素类型需兼容 。
这些数组属性从不同维度刻画了 numpy
数组的特征,在数据预处理、分析计算过程中,灵活运用它们,能让我们更高效地操控数组,减少错误,提升代码质量与运行效率 。
v.dtype
用于查询数组中元素的类型。numpy
支持丰富的数据类型,不同整数类型有明确含义与应用场景,下面详细介绍常见整数类型及相关颜色表示知识:
(一)整数类型解析
int8
:
表示 8 位有符号整数,取值范围是-128
到127
(计算方式:−27 到 27−1 )。由于存储空间小(仅占 1 字节 ),适合存储数据范围明确且较小的整数,比如简单的分类标签(标签值在 -128 ~ 127 内 ),但受限于范围,存储较大数值会溢出报错。int16
:
是 16 位有符号整数,取值范围为-32768
到32767
(−215 到 215−1 ),占 2 字节。可存储稍大范围的整数,像小型数据集的计数、简单传感器采集的小数值等场景适用。int32
:
为 32 位有符号整数,取值范围是-2147483648
到2147483647
(−231 到 231−1 ),占用 4 字节。在常规数据处理中较常用,能覆盖大部分日常整数场景,如一般的统计数量、数组索引计算等,多数情况下numpy
数组默认整数类型可能是int32
(因环境而异 )。int64
:
是 64 位有符号整数,取值范围达到-9223372036854775808
到9223372036854775807
(−263 到 263−1 ),占 8 字节。当处理极大数值时(比如大规模数据的唯一标识、科学计算中的超大整数结果 ),int64
可避免溢出问题,保证数据准确。
(二)颜色值与整数类型关联
在计算机图形学、图像处理领域,颜色常通过 RGB 模式 表示,即由红(Red)、绿(Green)、蓝(Blue)三个通道的数值组合呈现色彩。每个通道的取值范围是 0
到 255
,代表该颜色分量的强度。
这里的 0
到 255
是 无符号 8 位整数(对应 numpy
中的 uint8
类型 ,注意不是前面讲的有符号 int8
),取值范围是 0 到 28−1=255 。每个通道用 1 字节(8 位)存储,三种通道组合起来,用 3 字节就能表示 1600 余万种颜色(256×256×256 ),满足日常图像显示需求。比如纯红色可表示为 (255, 0, 0)
,纯绿色是 (0, 255, 0)
等 。
若用 int8
存储颜色通道值,因 int8
有符号,范围是 -128 到 127 ,无法直接对应 0 到 255 的需求,所以图像数据里颜色通道一般用 uint8
类型 。这也体现了不同数据场景下,选择合适 numpy
数据类型的重要性 —— 匹配数据本身的范围和含义,避免数据错误或存储浪费。
五.数组的升维
1. 一维数组变三维数组(reshape
用法)
这些数组属性从不同维度刻画了 numpy
数组的特征,在数据预处理、分析计算过程中,灵活运用它们,能让我们更高效地操控数组,减少错误,提升代码质量与运行效率 。
import numpy as nplist1 = [1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8]# list1: [1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8]
v = np.array(list1) # v: [1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8]
print(v)#一维变二维[-1表示自己计算]【返回一个改变后的矩阵】
# a.reshape(newshape, order='C')
# a: 要重新形状的数组。
# newshape: 一个整数或者元组,用于定义新的形状。
# order: 可选参数,指定元素在数组中的读取顺序。'C'意味着按行,'F'意味着按列,'A'意味着原顺序,'K'意味着元素在内存中的出
r1 = v.reshape(4,4) # r1: [[1 2 3 4], [5 6 7 8], [1 2 3 4], [5 6 7 8]]
reshape
特点:返回新形状的数组,不修改原数组v
,需保证数组元素总数能匹配新形状(元素总数 = 各维度大小相乘 )。
2. 二维数组变三维数组(reshape
用法延伸)
# 二维变三维,假设 r1 是已定义的二维 NumPy 数组,reshape(2, 2, 4) 即第一维大小 2、第二维 2、第三维 4
r3 = r1.reshape(2, 2, 4)
# 示例 r3 结果形式(依 r1 内容而定):[[[1 2 3 4], [5 6 7 8]], [[1 2 3 4], [5 6 7 8]]]
print(r3)
3. reshape
中 -1
含义补充
# 以一维数组变二维数组为例,v 是一维数组,reshape(-1, 4) 中 -1 让程序自动算行数,列数固定为 4
# 要求原数组元素总数能被 4 整除,否则报错,并非“几行几列都可以”,是自动适配行数
r1 = v.reshape(-1, 4)
print(r1)
# 获取数组维度数量,ndim 是 NumPy 数组属性,比如二维数组返回 2
print(r1.ndim)
二、resize
方法对比(直接修改原数组)
# resize 不返回新数组,直接修改原数组。以下先展示错误用法,再演示正确逻辑
# 错误示例:resize 无返回值,不能用变量接收结果
# r4 = v.resize(2, 4)
# print(r4) # 正确用法:直接修改原数组 v 的形状为 4 行 4 列(需保证元素总数匹配,不够可能补值或截断,依 NumPy 规则)
v.resize(4, 4)
# 打印修改后的原数组 v
print(v)
resize
特点:直接修改原始数组,不返回结果 ;若新形状所需元素数与原数组不同,NumPy 会按规则补值(默认补0
等,不同场景有差异 )或截断元素。