1. """
  2. Numpy 数组操作
  3.  
  4. 修改数组形状
  5. 函数 描述
  6. reshape 不改变数据的条件下修改形状
  7. flat 数组元素迭代器
  8. flatten 返回一份数组拷贝,对拷贝所做的修改不会影响原始数组
  9. ravel 返回展开数组
  10. """
  11.  
  12. import numpy as np
  13.  
  14. '''
  15. numpy.reshape
  16. numpy.reshape 函数可以在不改变数据的条件下修改形状,格式如下: numpy.reshape(arr, newshape, order='C')
  17. arr:要修改形状的数组
  18. newshape:整数或者整数数组,新的形状应当兼容原有形状
  19. order:'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'k' -- 元素在内存中的出现顺序。
  20. '''
  21. '''
  22. a = np.arange(8)
  23. print('原始数组:')
  24. print(a)
  25. print('\n')
  26.  
  27. b = a.reshape(4,2)
  28. print('修改后的数组:')
  29. print(b)
  30.  
  31. '''
  32.  
  33. '''
  34. numpy.ndarray.flat
  35. numpy.ndarray.flat 是一个数组元素迭代器,实例如下:
  36. '''
  37. '''
  38. a = np.arange(9).reshape(3,3)
  39. print('原始数组:')
  40. for row in a:
  41. print(row)
  42.  
  43. # 对数组中每个元素都进行处理,可以使用flat属性,该属性是一个数组元素迭代器
  44. print('迭代后的数组:')
  45. for element in a.flat:
  46. print(element)
  47. '''
  48.  
  49. '''
  50. numpy.ndarray.flatten
  51. numpy.ndarray.flatten 返回一份数组拷贝,对拷贝所做的修改不会影响原始数组,格式如下:
  52. ndarray.flatten(order='C')
  53. 参数说明:
  54. order:'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'K' -- 元素在内存中的出现顺序。
  55. '''
  56. '''
  57. a = np.arange(8).reshape(2,4)
  58. print('原数组:')
  59. print(a)
  60. print('\n')
  61.  
  62. #默认按行
  63. print('展开的数组:')
  64. print(a.flatten())
  65. print('\n')
  66.  
  67. print(' F 风格顺序展开的数组:')
  68. print(a.flatten(order = 'F'))
  69. '''
  70.  
  71. '''
  72. numpy.ravel
  73. numpy.ravel() 展平的数组元素,顺序通常是"C风格",返回的是数组视图(view,有点类似 C/C++引用reference的意味),修改会影响原始数组。
  74. 该函数接收两个参数:
  75. numpy.ravel(a, order='C')
  76. 参数说明:
  77. order:'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'K' -- 元素在内存中的出现顺序。
  78. '''
  79. '''
  80. a = np.arange(8).reshape(2,4)
  81.  
  82. print('原始数组:')
  83. print(a)
  84. print('\n')
  85.  
  86. print('调用 ravel 函数之后:')
  87. print(a.ravel())
  88. print('\n')
  89.  
  90. print(' F 风格顺序调用 ravel 函数之后:')
  91. print(a.ravel(order = 'F'))
  92. '''
  93.  
  94. '''
  95. 翻转数组
  96. 函数 描述
  97. transpose 对换数组的维度
  98. ndarray.T 和self.transpose()相同
  99. rollaxis 向后滚动指定的轴
  100. swapaxes 对换数组的两个轴
  101.  
  102. '''
  103.  
  104. '''
  105. numpy.transpose
  106. numpy.transpose 函数用于对换数组的维度,格式如下:
  107. numpy.transpose(arr, axes)
  108. 参数说明:
  109. arr:要操作的数组
  110. axes:整数列表,对应维度,通常所有维度都会对换。
  111. '''
  112. '''
  113. a = np.arange(12).reshape(3,4)
  114. print('原数组:')
  115. print(a)
  116. print('\n')
  117.  
  118. print('对换数组:')
  119. print(np.transpose(a))
  120. '''
  121.  
  122. '''
  123. numpy.ndarray.T 类似 numpy.transpose:
  124. '''
  125. '''
  126. a = np.arange(12).reshape(3, 4)
  127.  
  128. print('原数组:')
  129. print(a)
  130. print('\n')
  131.  
  132. print ('转置数组:')
  133. print (a.T)
  134. '''
  135.  
  136. '''
  137. numpy.rollaxis
  138. numpy.rollaxis 函数向后滚动特定的轴到一个特定位置,格式如下:
  139. numpy.rollaxis(arr, axis, start)
  140. 参数说明:
  141. arr:数组
  142. axis:要向后滚动的轴,其它轴的相对位置不会改变
  143. start:默认为零,表示完整的滚动。会滚动到特定位置。
  144. '''
  145.  
  146. '''
  147. # 创建了三维的 ndarray
  148. a = np.arange(8).reshape(2,2,2)
  149.  
  150. print('原数组:')
  151. print(a)
  152. print('\n')
  153.  
  154. # 将轴 2 滚动到轴 0 (宽度到深度)
  155. print('调用 rollaxis 函数:')
  156. print(np.rollaxis(a,2))
  157.  
  158. # 将轴 0 滚动到轴 1:(宽度到高度)
  159. print('\n')
  160.  
  161. print('调用 rollaxis 2 函数:')
  162. print(np.rollaxis(a,2,1))
  163. '''
  164.  
  165. '''
  166. a = np.array([[78, 34, 87, 25, 83], [25, 67, 97, 22, 13], [78, 43, 87, 45, 89]])
  167. print('原始数组:')
  168. print(a)
  169. print(' axis=0 是竖轴的数据,第一行打印出了每列的最大值')
  170. print(a.max(axis=0))
  171. print(' axis=1 axis=1就是横轴的')
  172. print(a.max(axis=1))
  173. '''
  174. '''
  175. a = np.array([[[0, 1], [2, 3]], [[4, 5], [6, 7]]])
  176. print('原始数组:')
  177. print(a)
  178. print(a.shape)
  179. print('\n')
  180.  
  181. print(' axis=0')
  182. print(a.max(axis=0))
  183. print('\n')
  184.  
  185. print(' axis=1')
  186. print(a.max(axis=1))
  187. print('\n')
  188.  
  189. print(' axis=2')
  190. print(a.max(axis=2))
  191. '''
  192.  
  193. '''
  194. numpy.swapaxes
  195. numpy.swapaxes 函数用于交换数组的两个轴,格式如下:
  196. numpy.swapaxes(arr, axis1, axis2)
  197. arr:输入的数组
  198. axis1:对应第一个轴的整数
  199. axis2:对应第二个轴的整数
  200. '''
  201. '''
  202. # 创建三维的 ndarray
  203. a = np.arange(8).reshape(2,2,2)
  204. print ('原数组:')
  205. print (a)
  206. print ('\n')
  207. # 现在交换轴 0(深度方向)到轴 2(宽度方向)
  208. print ('调用 swapaxes 函数后的数组:')
  209. print(np.swapaxes(a,2,0))
  210. '''
  211.  
  212. '''
  213. 修改数组维度
  214. 维度 描述
  215. broadcast 产生模仿广播的对象
  216. broadcast_to 将数组广播到新形状
  217. expand_dims 扩展数组的形状
  218. squeeze 从数组的形状中删除一维条目
  219. '''
  220.  
  221. '''
  222. numpy.broadcast用于模仿广播的对象,它返回一个对象,该对象封装了将一个数组广播到另一个数组的结果。
  223. '''
  224. '''
  225. x = np.array([[1],[2],[3]])
  226. y = np.array([4,5,6])
  227. print('x 原数组:\n',x)
  228. print('y 原数组:\n',y)
  229. # 对 y 广播 x
  230. b = np.broadcast(x,y)
  231. # 它拥有 iterator 属性,基于自身组件的迭代器元组
  232. print(' y 广播 x')
  233. r,c = b.iters
  234.  
  235. #Python3.x 为 next(context) ,Python2.x 为 context.next()
  236. print(next(r),next(c))
  237. print(next(r),next(c))
  238. print(next(r),next(c))
  239. print(next(r),next(c))
  240. print(next(r),next(c))
  241. print(next(r),next(c))
  242. print(next(r),next(c))
  243. print(next(r),next(c))
  244. print(next(r),next(c))
  245. print('广播结束')
  246. # print(next(r),next(c))
  247. print('\n')
  248.  
  249. #shape 属性返回广播对象的形状
  250. print ('广播对象的形状:')
  251. print (b.shape)
  252. print ('\n')
  253. # 手动使用 broadcast 将 x 与 y 相加
  254. b = np.broadcast(x,y)
  255. # 创建空数组的实例:
  256. # numpy.empty 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组:
  257. # numpy.empty(shape, dtype = float, order = 'C')
  258. c = np.empty(b.shape)
  259. print('c shape\n',c)
  260. print('手动使用 broadcast x y 相加:')
  261. print(c.shape)
  262. print('\n')
  263. # numpy.ndarray.flat 是一个数组元素迭代器
  264. c.flat = [u + v for (u, v) in b]
  265. print('c 函数:',c.dtype)
  266. print('调用 flat 函数:')
  267. print(c)
  268. print('\n')
  269. # 获得了和 NumPy 内建的广播支持相同的结果
  270.  
  271. print('x y 的和:')
  272. print(x + y)
  273. '''
  274.  
  275. '''
  276. numpy.broadcast_to
  277. numpy.broadcast_to 函数将数组广播到新形状。它在原始数组上返回只读视图。 它通常不连续。 如果新形状不符合 NumPy 的广播规则,该函数可能会抛出ValueError。
  278. numpy.broadcast_to(array, shape, subok)
  279. '''
  280. '''
  281. a = np.arange(4).reshape(1,4)
  282. print('原数组:\n',a)
  283. print('调用 broadcast_to 函数之后:')
  284. print(np.broadcast_to(a,(4,4)))
  285. '''
  286.  
  287. '''
  288. numpy.expand_dims
  289. numpy.expand_dims 函数通过在指定位置插入新的轴来扩展数组形状,函数格式如下:
  290. numpy.expand_dims(arr, axis)
  291. 参数说明:
  292. arr:输入数组
  293. axis:新轴插入的位置
  294.  
  295. '''
  296.  
  297. '''
  298. x = np.array(([1,2],[3,4]))
  299. print('数组 x\n',x)
  300. y = np.expand_dims(x,axis=0)
  301. print('数组 y\n',y)
  302.  
  303. print('数组 x y 的形状:\n',x.shape,y.shape)
  304.  
  305. print('在位置 1 插入轴之后的数组 y\n',y)
  306. print('x.ndim y.ndim\n',x.ndim,y.ndim)
  307. print('x.shape y.shape',x.shape,y.shape)
  308. '''
  309.  
  310. '''
  311. numpy.squeeze
  312. numpy.squeeze 函数从给定数组的形状中删除一维的条目,函数格式如下:
  313. numpy.squeeze(arr, axis)
  314. 参数说明:
  315. arr:输入数组
  316. axis:整数或整数元组,用于选择形状中一维条目的子集
  317. '''
  318. x = np.arange(9).reshape(1,3,3)
  319. print('数组 x:\n',x)
  320. y = np.squeeze(x) # 从数组的形状中删除单维条目,即把shape中为1的维度去掉
  321. print('数组 y:\n',y)
  322.  
  323. print('数组 x 和 y的形状:', x.shape , y.shape)

Numpy数组操作的更多相关文章

  1. Numpy 数组操作

    Numpy 数组操作 Numpy 中包含了一些函数用于处理数组,大概可分为以下几类: 修改数组形状 翻转数组 修改数组维度 连接数组 分割数组 数组元素的添加与删除 修改数组形状 函数 描述 resh ...

  2. Python+OpenCV图像处理(三)—— Numpy数组操作图片

    一.改变图片每个像素点每个通道的灰度值 (一) 代码如下: #遍历访问图片每个像素点,并修改相应的RGB import cv2 as cv def access_pixels(image): prin ...

  3. 9、numpy——数组操作

    Numpy 中包含了一些函数用于处理数组,大概可分为以下几类: (1)修改数组形状 (2)翻转数组 (3)修改数组维度 (4)连接数组 (5)分割数组 (6)数组元素的添加与删除 1.修改数组形状 函 ...

  4. 吴裕雄--天生自然Numpy库学习笔记:Numpy 数组操作

    import numpy as np a = np.arange(8) print ('原始数组:') print (a) print ('\n') b = a.reshape(4,2) print ...

  5. python numpy数组操作2

    数组的四则运算 在numpy模块中,实现四则运算的计算既可以使用运算符号,也可以使用函数,具体如下例所示: #加法运算 import numpy as npmath = np.array([98,83 ...

  6. python numpy数组操作

    数组的创建 import numpy as np arr1 = np.array([3,10,8,7,34,11,28,72]) arr2 = np.array(((8.5,6,4.1,2,0.7), ...

  7. 初探numpy——广播和数组操作函数

    numpy广播(Broadcast) 若数组a,b形状相同,即a.shape==b.shape,那么a+b,a*b的结果就是对应数位的运算 import numpy as np a=np.array( ...

  8. numpy数组的操作

    numpy - 介绍.基本数据类型.多维数组ndarray及其内建函数 http://blog.csdn.net/pipisorry/article/details/22107553 http://w ...

  9. Numpy数组对象的操作-索引机制、切片和迭代方法

    前几篇博文我写了数组创建和数据运算,现在我们就来看一下数组对象的操作方法.使用索引和切片的方法选择元素,还有如何数组的迭代方法. 一.索引机制 1.一维数组 In [1]: a = np.arange ...

随机推荐

  1. CodeBenchmark之压力测试详解

    CodeBenchmark是一款高性能可视化的并发测试组件,通过组件可以对任意逻辑代码或服务进行并发测试:组件最终通过可视化的方式来显示测试结果,在测试结果中可以看到具体的并发情况和处理延时的分布.组 ...

  2. Fire Balls 10——UI界面的制作

    版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...

  3. Tomcat原理系列之六:详解socket如何封装成request(上)

    目录 参与者 总结 @(详解socket如何封装成request) 看源码虽然不能马上提升你的编码水平.但能让你更好的理解编程. 因为我们tomcat多是以NIO形式处理请求,所以本系列讲的都是NIO ...

  4. 初始mqtt服务

    MQTT入门 概念 mqtt意为消息队列遥测传输,是IBM开发的一个即时通讯协议.由于其维护一个长连接以轻量级低消耗著称,所以常用于移动端消息推送服务开发. 协议格式 mqtt协议控制报文的格式包含三 ...

  5. Spring boot运行原理-自定义自动配置类

    在前面SpringBoot的文章中介绍了SpringBoot的基本配置,今天我们将给大家讲一讲SpringBoot的运行原理,然后根据原理我们自定义一个starter pom. 本章对于后续继续学习S ...

  6. Linux 笔记 - 第十四章 LAMP 之(二) 环境配置

    博客地址:http://www.moonxy.com 一.前言 LAMP 环境搭建好之后,其实仅仅是安装上了软件,我们还需要掌握 httpd 和 PHP 的配置. 二.httpd 配置 2.1 创建虚 ...

  7. LeetCode 1169. 查询无效交易

    题目链接:https://leetcode-cn.com/problems/invalid-transactions/ 如果出现下述两种情况,交易 可能无效: 交易金额超过 ¥1000或者,它和另一个 ...

  8. [原创] 为Visio添加公式编辑器工具栏按钮

    前言 作为理工科的学生,在写论文时,难免会在示意图中添加一些公式来说明研究内容.常用的画图工具就是 Visio .而常用的公式编辑器就是 Mathtype .对于 Word 这种软件,Mathtype ...

  9. [Advanced Python] 16 - Google style guide for programming

    Ref: Python 风格指南 - 内容目录 这里主要记录一下值得注意的地方. Python语言规范 Lint:vsCode自带 导入:完整路径 异常 Ref: [Python] 07 - Stat ...

  10. JavaScript之对象Array

    数组Array是JavaScript中最常用的类型之一,同一数组中可以保存任意类型的数据,并且它的长度是动态的,会随着数组中数据的加减自动变化.每个数组都有一个表示其长度(数组元素的个数)的lengt ...