经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » NumPy » 查看文章
numpy.array 操作使用简单总结
来源:jb51  时间:2019/11/8 17:09:35  对本文有异议
  1. import numpy as np

numpy.array 常用变量及参数

  • dtype变量,用来存放数据类型, 创建数组时可以同时指定。
  • shape变量, 存放数组的大小, 这人值是可变的, 只要确保无素个数不变的情况下可以任意修改。(-1为自动适配, 保证个数不变)
  • reshape方法,创建一个改变了形状的数组,与原数组是内存共享的,即都指向同一块内存。 

创建数组的方法

  1. np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]], dtype=np.float)
  2. np.arange(0,1,0.1) #0到1之间步长为0.1的数组, 数组中不包含1
  3. np.linspace(0, 1, 5) # 开始:0, 结束1, 元素个数 5。 array([ 0. , 0.25, 0.5 , 0.75, 1. ])
  4. np.logspace(0, 1, 5) # 开始:0, 结束1, 元素个数 5. array([ 10**0. , 10**0.25, 10**0.5 , 10**0.75, 10**1. ])
  5. # 结果是 array([ 1. , 1.77827941, 3.16227766, 5.62341325, 10. ])
  6. s = 'abcdefg'
  7. np.fromstring(s, dtype=np.int8)
  8. def func2(i, j):
  9. return (i+1) * (j+1)
  10. np.fromfunction(func2, (9,9))
  11. np.ones((2, 2))
  12. np.zero((2, 2))
  13. np.eye(2)
  14. #创建二维数组:
  15. np.arange(0, 60, 10).reshape(-1, 1) + np.arange(0, 6)

数据读取

通过下标范围获取数据: 与python list对象操作一致。 不同点是这方法获取的数组与原数组是内存共享的。

通过整数序列获取新数组:例 x[[3,2,3,2] ], 产生新数组, 内存不共享

使用布尔数组获取数据:例: x[np.array([True, False, True, False, False])] 或 x[x>0.5], 返回True对应的数字。

代码示例:

  1. >>> x = np.arange(10)
  2. >>> y = x[::-1]
  3. >>> x
  4. array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
  5. >>> y
  6. array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
  7. >>> y[0] = 100
  8. >>> x
  9. array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 100])
  10. >>> y
  11. array([100, 8, 7, 6, 5, 4, 3, 2, 1, 0])
  12. >>> x[0] = 99
  13. >>> x
  14. array([ 99, 1, 2, 3, 4, 5, 6, 7, 8, 100])
  15. >>> y
  16. array([100, 8, 7, 6, 5, 4, 3, 2, 1, 99])
  17. >>> y = x[1:6]
  18. >>> y
  19. array([1, 2, 3, 4, 5])
  20. >>> y[2] = 33
  21. >>> y
  22. array([ 1, 2, 33, 4, 5])
  23. >>> x
  24. array([ 99, 1, 2, 33, 4, 5, 6, 7, 8, 100])
  25. >>> x[[3,2,3,2]]
  26. array([33, 2, 33, 2])
  27. >>> z = x[[3,2,3,2]]
  28. >>> z
  29. array([33, 2, 33, 2])
  30. >>> z[3] = 4
  31. >>> z
  32. array([33, 2, 33, 4])
  33. >>> x
  34. array([ 99, 1, 2, 33, 4, 5, 6, 7, 8, 100])
  35. >>> x[x>10]
  36. array([ 99, 33, 100])
  37. >>>

数组扩展

np.vstack((a, b)):  增加行数, 把b数据追加到a的下面, 上下连接。
np.hstack((a, b)): 增加列数,把a, b左右连接。

  1. >>> a = np.ones((3,3))
  2. >>> b = np.eye(3)
  3. >>> a
  4. array([[ 1., 1., 1.],
  5. [ 1., 1., 1.],
  6. [ 1., 1., 1.]])
  7. >>> b
  8. array([[ 1., 0., 0.],
  9. [ 0., 1., 0.],
  10. [ 0., 0., 1.]])
  11. >>> b *= 2
  12. >>> b
  13. array([[ 2., 0., 0.],
  14. [ 0., 2., 0.],
  15. [ 0., 0., 2.]])
  16. >>> np.vstack((a, b))
  17. array([[ 1., 1., 1.],
  18. [ 1., 1., 1.],
  19. [ 1., 1., 1.],
  20. [ 2., 0., 0.],
  21. [ 0., 2., 0.],
  22. [ 0., 0., 2.]])
  23. >>>
  24. >>> np.hstack((a, b))
  25. array([[ 1., 1., 1., 2., 0., 0.],
  26. [ 1., 1., 1., 0., 2., 0.],
  27. [ 1., 1., 1., 0., 0., 2.]])

ufunc运算

ufunc是universal function的缩写,它是一种能对数组的每个元素进行操作的函数。NumPy内置的许多ufunc函数都是在C语言级别实现的,因此它们的计算速度非常快。

  1. np.sin(x, x)
  2. np.add(a, b) ~ a+b
  3. np.subtract(a, b) ~ a-b
  4. np.multiply(a, b) ~ a*b
  5. divide ~ a/b
  6. floor divide ~ a//b
  7. negative ~ -a
  8. power ~ a**b
  9. remainder ~ a % b
  10.  

注意:复杂运算时,中间步聚会有临时变量,这会拖慢运算速度。

如:

  1. x = a*b + c

等价于

  1. t = a*b
  2. x = t + c
  3. del t

所以可手动优化

  1. x = a * b
  2. x += c

二维数组转一维 

  1. >>> a
  2. array([[ 1, 2, 3, 4],
  3. [ 4, 5, 6, 7],
  4. [ 7, 8, 9, 10]])
  5. >>> a.ravel()
  6. array([ 1, 2, 3, 4, 4, 5, 6, 7, 7, 8, 9, 10])

reshape函数可重新定义大小。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号