2024年手把手教你用Python的NumPy包处理数据!NumPy可是神器!

本文介绍了NumPy数组的基本概念,包括ndim、shape、size和dtype属性,以及如何通过索引访问和操作数组元素。同时展示了如何创建一维和多维数组,如二维数组用于机器学习中的特征表示和三维数组用于OpenCV中的图像处理。
摘要由CSDN通过智能技术生成

而且,每个NumPy数组都具有以下属性:

  • ndim: 维数。

  • shape: 每一维的大小。

  • size: 数组中元素的总数。

  • dtype: 数组的数据类型(例如int、float、string等)。

让我们来看看整数数组的上述属性:

print( “int_arr ndim: “, int_arr.ndim)

print( “int_arr shape: “, int_arr.shape)

print( “int_arr size: “, int_arr.size)

print( “int_arr dtype: “, int_arr.dtype)

输出结果:

int_arr ndim: 1

int_arr shape: (10,)

int_arr size: 10

int_arr dtype: int64

从这些输出中,我们可以看到我们的数组只包含一维,其包含10个元素且所有元素都是64位的整数。当然,如果你在32位机器上执行这段代码,你可能会得到dtype:int 32。

03 通过索引访问单个数组元素

如果你之前使用过Python的标准列表索引,那么你就不会发现NumPy中的索引有很多问题。在一维数组中,通过在方括号中指定所需的索引,可以访问第i个值(从0开始计算),与Python列表一样:

int_arr

输出结果:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

int_arr[ 0]

输出结果:

0

int_arr[ 3]

输出结果:

3

要从数组的末尾建立索引,可以使用负索引号:

int_arr[ -1]

输出结果:

9

int_arr[ -2]

输出结果:

8

切割数组还有一些其他很酷的技巧,如下所示:

int_arr[ 2: 5] #from index 2 up to index 5 – 1

输出结果:

array([2, 3, 4])

int_arr[: 5] #from the beginning up to index 5 – 1

输出结果:

array([0, 1, 2, 3, 4])

int_arr[ 5:] #from index 5 up to the end of the array

输出结果:

array([5, 6, 7, 8, 9])

int_arr[:: 2] #every other element

输出结果:

array([0, 2, 4, 6, 8])

int_arr[:: -1] #the entire array in reverse order

输出结果:

array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])

建议你自己尝试使用这些数组!

提示:NumPy中切割数组的一般形式与标准Python列表中的相同。使用x [start: stop: step]访问数组x中的一个片段。如果没有指定任何一个值,那么默认值为start=0、stop=size of dimension、step=1。

04 创建多维数组

数组不必局限于列表。实际上,数组可以有任意维数。在 机器学习 中,通常我们至少要处理二维数组,列索引表示特定的特征值,行包含实际的特征值。

使用NumPy可以轻松地从头开始创建多维数组。假设我们想要创建一个3行5列的数组,所有的元素都初始化为0。如果我们不指定数据类型,NumPy将默认使用float类型:

arr_2d = np.zeros(( 3, 5))

arr_2d

输出结果:

array([[0., 0., 0., 0., 0.],

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

[0., 0., 0., 0., 0.]])

使用OpenCV时你可能就知道:这可以解释为所有像素设置为0(黑色)的一个3×5的灰度图像。例如,如果你想要创建具有3个颜色通道(R、G和B)2×4像素的一个小图像,但是所有像素都设置为白色,我们将使用NumPy创建一个3×2×4的三维数组:

arr_float_3d = np.ones(( 3, 2, 4))

arr_float_3d

输出结果:

array([[[1., 1., 1., 1.],

[1., 1., 1., 1.]],

[[1., 1., 1., 1.],

[1., 1., 1., 1.]],

[[1., 1., 1., 1.],

[1., 1., 1., 1.]]])

这里,第一维定义颜色通道(OpenCV中的蓝色、绿色和红色)。因此,如果这是真实的图像数据,我们可以通过切割数组轻松地获得第一个通道中的颜色信息:

arr_float_3d[ 0, :, :]

输出结果:

array([[1., 1., 1., 1.],

[1., 1., 1., 1.]])

在OpenCV中,图像要么是值在0到1之间的32位浮点数组,要么是值在0到255之间的8位整数数组。因此,使用8位整数,通过指定NumPy的dtype属性并将数组中的所有1乘以255,我们还可以创建一个2×4像素、全为白色的RGB图像:

arr_uint_3d = np.ones(( 3, 2, 4), dtype=np.uint8) * 255

arr_uint_3d

输出结果:

array([[[255, 255, 255, 255],

[255, 255, 255, 255]],

[[255, 255, 255, 255],

[255, 255, 255, 255]],

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值