NumPy

---恢复内容开始---

nadarray N维数组对象(矩阵)

  • 所有元素必须是相同类型
  • ndim属性,维度个数
  • shape属性,各维度的大小
  • dtype属性,数据类型
import numpy as np

# 生成指定维度的随机多维数组
data = np.random.rand(2, 3)
print(data)
# 输出维度,各维度大小,数据类型
print(data.ndim,data.shape,data.dtype)

[[0.01079846 0.78480752 0.20083994]
 [0.32519923 0.45055176 0.62211721]]
2 (2, 3) float64
# 创建多维数组 np.array(collection)
l = range(10)
data = np.array(l)
print(data)

[0 1 2 3 4 5 6 7 8 9]
# 创建特殊数组 (注意第一个参数是一个元组,第二个是类型)
data1 = np.zeros((3, 4))
data2 = np.ones((3, 4))
data3 = np.empty((3, 4))
data4 = np.empty((3, 4), float) # 指定类型



[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]
# 创建连续数组 arange
data = np.arange(10)
print(data)
arr = np.arange(10).reshape(5,2)
print(arr) [0
1 2 3 4 5 6 7 8 9]
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
import numpy as np

# 数据类型转换  astype
data = np.zeros((3, 4),dtype = np.float64)
data2 = data.astype(np.int32)
print(data)
print(data2)



[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
[[0 0 0 0]
 [0 0 0 0]
 [0 0 0 0]]

 

矢量化

  • 矢量运算,相同大小的数组键间的运算应用在元素上(相同位置元素间的运算)
  • 矢量和标量运算,“广播” - 将标量“广播”到各个元素(将标量拓展成和矢量相同维度的矢量再进行运算)
import numpy as np

data = np.array([[1,2,3],[4,5,6]])
dat2 = np.array([[1,2,3],[4,5,6]])
print(data*data) # 元素相乘
print(data+data) # 元素相加
print(1+data)  # 标量运算

[[ 1  4  9]
 [16 25 36]]
[[ 2  4  6]
 [ 8 10 12]]
[[2 3 4]
 [5 6 7]]

 

索引和切片

  • 一维索引与列表相同
  • 多维索引
  • arr[r1:r2,c1:c2]
  • arr[1,1]等价于arr[1][1]
data = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(data[1: , 1: ])


[[5 6]
 [8 9]]
  • 条件索引
  • 布尔值多维数组  arr[condition] , condition可以是多个条件组合
  • 注意多个条件之间用  &  |
# 例:两个矩阵分别为年份和对应年份的数据,根据年份筛选数据
data = np.random.rand(3, 3)
print(data)
year = np.array([[2000,2001,2000],
                 [2005,2002,2009],
                 [2001,2003,2010]])
bools = year >= 2005  # 矢量与标量运算得到了一个布尔值矩阵
print(bools)
filt = data[bools]  # 和索引类似,根据布尔值矩阵取值
print(filt)

filt2 = data[(year<=2005)&(year%2==0)] # 多条件一步完成
print(filt2)

[[0.62446346 0.51132454 0.25793773]
 [0.21665339 0.93084313 0.35361838]
 [0.70143462 0.53508498 0.21204337]]
[[False False False]
 [ True False  True]
 [False False  True]]
[0.21665339 0.35361838 0.21204337]
[0.62446346 0.25793773 0.93084313]

 通用函数:

  • 元素级运算

常用的通用函数

  • ceil,向上最接近的整数
  • floor,向下最接近的整数
  • rint,四舍五入
  • isnan,判断元素是否为NaN
  • multiply,元素相乘
  • divide,元素相除
import numpy as np
arr = np.random.randn(2,3)
print(arr)
print(np.ceil(arr))
print(np.floor(arr))

[[ 0.73331615  0.12702309 -0.02600682]
 [-1.85277069 -0.38666438 -0.84873975]]
[[ 1.  1. -0.]
 [-1. -0. -0.]]
[[ 0.  0. -1.]
 [-2. -1. -1.]]

三元表达式:

  • 矢量版本的三元表达式
  • np.where(condition,x,y)

常用的统计方法

  • np.man  np.sum
  • np.max  np.min
  • np.std  np.var
  • np.argmax  np.argmin
  • np.cusum  np.cumprod
  • 注意多维的话指定统计的维度,否则默认是全部维度上做统计
import numpy as np
arr = np.random.randn(2,3)
print(np.where(arr>0, 1, -1))

[[ 1 -1 -1]
 [ 1 -1  1]]
import numpy as np
arr = np.arange(10).reshape(5,2)
print(np.sum(arr))  # 所有相加
print(np.sum(arr, axis=0)) # 列元素相加
print(np.sum(arr, axis=1)) # 行元素相加

45
[20 25]
[ 1  5  9 13 17]

 

posted @ 2018-12-20 22:42  Mili叶子  阅读(113)  评论(0编辑  收藏  举报