菜鸟笔记
提升您的技术认知

numpy.array 函数简介

import numpy as np

numpy.array 常用变量及参数

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

创建数组的方法

[python]  view plain  copy

  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.   
  7. s = 'abcdefg'  
  8. np.fromstring(s, dtype=np.int8)  
  9.   
  10. def func2(i, j):  
  11.     return (i+1) * (j+1)  
  12. np.fromfunction(func2, (9,9))  
  13.   
  14. np.ones((2, 2))  
  15. np.zero((2, 2))  
  16. np.eye(2)  
  17.   
  18. #创建二维数组:  
  19. 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对应的数字。 代码示例: [python]  view plain  copy

  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左右连接。 [python]  view plain  copy

  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语言级别实现的,因此它们的计算速度非常快。

[python]  view plain  copy

  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  

注意:复杂运算时,中间步聚会有临时变量,这会拖慢运算速度。 如: [python]  view plain  copy

  1. x = a*b + c  

等价于 [python]  view plain  copy

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

所以可手动优化

[python]  view plain  copy

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

二维数组转一维 

[html]  view plain  copy

  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])  

[html]  view plain  copy

  1. reshape函数可重新定义大小。