3.4 数组操作
来源:互联网 发布:出版社运作知乎 编辑:程序博客网 时间:2024/06/03 19:22
本节主要介绍对数组的变形、拼接、切分和复制等操作。
3.4.1 变形
关于数组的变形除了3.2节介绍的reshape()函数,NumPy还有其他操作变形的函数和方法,示例代码:
>>>a = np.random.randint(1, 10, size=(2, 6))>>>aarray([[2, 4, 3, 7, 4, 7], [8, 7, 6, 1, 2, 5]])>>>np.ravel(a)array([2, 4, 3, 7, 4, 7, 8, 7, 6, 1, 2, 5]) #返回成行向量形式,原数组形状不变>>>aarray([[2, 4, 3, 7, 4, 7], [8, 7, 6, 1, 2, 5]])>>>a.T #返回数组a的转置矩阵,有返回值,原数组形状不变array([[2, 8], [4, 7], [3, 6], [7, 1], [4, 2], [7, 5]])>>>aarray([[2, 4, 3, 7, 4, 7], [8, 7, 6, 1, 2, 5]])>>>a.resize(6, 2) >>>#与转置不同,resize()函数以行元素递进,依次按照参数要求进行重新排列,无返回值,原数组发生改变>>>aarray([[2, 4], [3, 7], [4, 7], [8, 7], [6, 1], [2, 5]])>>>a.reshape(2, 6) #与resize()功能相同,有返回值,原数组不变array([[2, 4, 3, 7, 4, 7], [8, 7, 6, 1, 2, 5]])>>>aarray([[2, 4], [3, 7], [4, 7], [8, 7], [6, 1], [2, 5]])
以上函数或方法的功能及相关注意事项,如下表所示:
3.4.2 拼接
两个数组合并成一个数组叫做拼接,根据方向不同,分为垂直拼接vstack()和水平拼接hstack(),示例代码:
>>>a = np.random.randint(1, 9, size = (2, 4))>>>aarray([[6, 3, 8, 2], [4, 6, 4, 1]])>>>b = np.random.randint(1, 9, size = (3, 4))>>>barray([[2, 6, 2, 6], [3, 5, 3, 5], [6, 7, 1, 6]])>>>np.vstack((a, b))array([[6, 3, 8, 2], [4, 6, 4, 1], [2, 6, 2, 6], [3, 5, 3, 5], [6, 7, 1, 6]])>>>c = np.random.randint(1, 9, size = (3, 2))>>>carray([[6, 4], [2, 5], [4, 5]])>>>d = np.random.randint(1, 9, size = (3, 4))>>>darray([[5, 1, 1, 7], [7, 4, 4, 1], [4, 4, 7, 3]])>>>np.hstack((c, d))array([[6, 4, 5, 1, 1, 7], [2, 5, 7, 4, 4, 1], [4, 5, 4, 4, 7, 3]])
注意,垂直拼接中两个数组的列数目要保持一致,水平拼接中两个数组的行数目要保持一致,否则会报错。
3.4.3 切分
与拼接相对应的是vsplit()和hsplit()函数,即对数组进行垂直切分和水平切分,其中第一个参数是待切分的数组,第二个参数表示切分数组的个数。示例代码:
>>>a = np.random.randint(1, 100, size = (6, 2))>>>aarray([[28, 57], [67, 37], [36, 47], [65, 51], [26, 69], [20, 17]])>>>np.hsplit(a, 3)[array([[28, 57],[67, 37]]), array([[36, 47],[65, 51]]), array([[26, 69],[20, 17]])]>>>b = np.random.randint(1, 100, size = (2, 6))>>>barray([[13, 4, 71, 86, 70, 99], [81, 84, 75, 83, 44, 74]])>>>np.vsplit(b, 3)[array([[13, 4],[81, 84]]), array([[71, 86],[75, 83]]), array([[70, 99],[44, 74]])]
3.4.4 复制
探讨数组复制之前,先说明一下数组赋值,Python语言一切对象皆变量,其赋值的含义代表两变量共享同一块内存空间,这条原则对于数组赋值同样适用,当新赋值数组元素值发生改变时,原数组元素值同样发生改变。示例代码:
>>>a = np.array([[1, 2, 3], [4, 5, 6]])>>>aarray([[1, 2, 3], [4, 5, 6]])>>>b = a>>>id(a)1366556467968 >>>id(b) #id()函数指向同一个对象1366556467968>>>b[0, 2] = 555>>>aarray([[ 1, 2, 555], [ 4, 5, 6]])
对于NumPy,分为浅复制和深复制两种,浅复制即创建原数组的视图view(),其功能与赋值类似,视图与原数组共享同一块内存,原数组的值随着视图的改变而改变,示例代码:
>>>a = np.array([[1, 2, 3], [4, 5, 6]])>>>v = a.view()>>>varray([[1, 2, 3], [4, 5, 6]])>>>v[0, 2] = 23>>>aarray([[ 1, 2, 23], [ 4, 5, 6]])
深复制使用NumPy中的copy()方法,其作用是创建一块新的内存空间给复制对象,即复制后的数组元素对原数组没有影响,示例代码:
>>>a = np.array([[1, 2, 3], [4, 5, 6]])>>>c = a.copy()>>>c[0, 2] = 23>>>aarray([[1, 2, 3], [4, 5, 6]])
深复制也可以使用numpy.copy()函数,其作用与数组的copy()方法一致,示例代码:
>>>a = np.array([[1, 2, 3], [4, 5, 6]])>>>c = np.copy(a)>>>c[0, 2] = 23>>>carray([[ 1, 2, 23], [ 4, 5, 6]])>>>aarray([[1, 2, 3], [4, 5, 6]])
阅读全文
0 0
- 3.4 数组操作
- 数组操作
- 数组操作
- 数组操作
- 数组操作
- 数组操作
- 数组操作
- 数组操作
- 数组操作
- 操作数组
- 数组操作
- 操作数组
- 数组操作
- 数组操作
- 数组操作
- 数组操作
- 数组操作
- 数组操作
- springmvc/uploadify 多文件上传
- 并查集:HDU1213-How Many Tables(并查集最简单的应用)
- js 路由 mark
- Mysql事务的隔离级别
- 搭建即席查询平台
- 3.4 数组操作
- Unity DoTween插件说明
- Python 之 使用 PIL 库做图像处理(pillow+ImageDraw)
- linux-1 passwd 修改用户密码
- 几种常见的激活函数
- Android EditText 中hint文字大小以及与输入文字颜色保存一致
- java六大设计原则详解——设计模式
- Machine Learning on Spark—— 统计基础(一)
- 64位和32位系统区别