1. NumPy数组基础
python中的数据操作几乎等同于NumPy数组操作,另外一个重要的工具包pandas也是构建在Numpy数组的基础之上的。
1.1 NumPy数组的属性
首先定义三个随机的数组:一个一维数组、二维数组和三维数组。
In[1]: import numpy as np
np.random.seed(0) # 设置随机数种子
x1 = np.random.randint(10,size=6) # 一维数组
x2 = np.random.randint(10,size=(3,4)) # 二维数组
x3 = np.random.randint(10,size=(3,4,5)) # 三维数组
每个数组有nidm(数组的维度)、shape(数组每个维度的大小)和size(数组的总大小)属性:
In[2]: print("x3 ndim:",x3.ndim)
print("x3 shape:",x3.shape)
print("x3 size:",x3.size)
x3 ndim: 3
x3 shape: (3, 4, 5)
x3 size: 60
另外一个有用的属性是dtype,它是数组的数据类型
In[3]: print("dtype:",x3.dtype)
dtype: int64
其他的属性包括表示每个数组元素字节大小的itemsize,以及表示数组总字节大小的属性nbytes:
In[4]: print("itemsize:",x3.itemsize,"bytes")
print("nbytes:",x3.nbytes,"bytes")
itemsize: 8 bytes
nbytes: 480 bytes
一般来说,可以认为itemsize与size的乘积大小和nbytes相等。
1.2 数组索引:获取单个元素
获取单个元素的索引方式与python的标准列表索引没什么区别,在一维数组中:
- 通过中括号指定索引获取第i个值(从0开始计数)
- 获取数组的末尾索引,可以用负值索引
在多维数组中,可以使用逗号分隔的索引元祖获取元素:
In [5]: x2
Out[5]:
array([[5, 0, 3, 3],
[7, 9, 3, 5],
[2, 4, 7, 6]])
In [6]: x2[2,3]
Out[6]: 6
In [7]: x2[2,-1]
Out[7]: 6
也可以用以上索引方式修改元素值:
In [8]: x2[2,3] = 1
In [9]: x2
Out[9]:
array([[5, 0, 3, 3],
[7, 9, 3, 5],
[2, 4, 7, 1]])
要注意一点:Numpy数组是固定类型的,你将一个浮点值插入一个整型数组时,浮点值会被截短成整型。并且这种截短时自动完成的,不会给你提示或警告。
In [11]: x1[0] = 3.14159 #会被自动截短
In [12]: x1
Out[12]: array([3, 8, 1, 6, 7, 7])
1.3 数组切片:获取子数组
NumPy切片语法和python列表多标准切片语法相同,为了获取数组x的一个切片,可以使用:
x[start:stop:step]
如果以上三个参数都未指定,那么它们会被分别设置默认值start=0,stop=维度的大小和step=1.
1.3.1 一维子数组
In [18]: x = np.arange(10)
In [19]: x
Out[19]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [20]: x[:5] # 前5个元素
Out[20]: array([0, 1, 2, 3, 4])
In [

本文详细介绍了NumPy数组的基础知识,包括数组属性、索引、切片、变形,以及数组的拼接和分裂。重点讲解了如何通过索引获取单个元素和子数组,以及reshape()函数在数组变形中的应用。此外,还探讨了数组拼接的多种方法,如concatenate、vstack和hstack,以及如何使用split进行数组分裂。
最低0.47元/天 解锁文章
492

被折叠的 条评论
为什么被折叠?



