机器学习中,数据的形态转变十分频繁,今天我们就来看看如何做数据的变换

改变形态

改变形态,其实是针对与多维度空间上的数据,要改变它的维度信息,和每个维度中的数据格式。所以第一点你就要清楚,如何添加维度。 其实在 多维数据教程中 中我们就提到过添加维度的方法,我这里在总结括展一下。

  1. import numpy as np
  2. a = np.array([1,2,3,4,5,6])
  3. ### np.newaxis
  4. a_2d = a[np.newaxis, :]
  5. print( a_2d)
  6. [[1 2 3 4 5 6]]
  7. print(a.shape, a_2d.shape)
  8. (6,) (1, 6)
  9. ### None 和 np.expand_dims(),
  10. a = np.array([1,2,3,4,5,6])
  11. a_none = a[:, None]
  12. a_expand = np.expand_dims(a, axis=1)
  13. print( a_none)
  14. [[1]
  15. [2]
  16. [3]
  17. [4]
  18. [5]
  19. [6]]
  20. print(a_none.shape, a_expand.shape)
  21. (6, 1) (6, 1)
  1. a_squeeze = np.squeeze(a_expand)
  2. a_squeeze_axis = a_expand.squeeze(axis=1)
  3. print(a_expand)
  4. print(a_squeeze)
  5. print(a_squeeze.shape)
  6. print(a_squeeze_axis)
  7. print(a_squeeze_axis.shape)
  8. [[1]
  9. [2]
  10. [3]
  11. [4]
  12. [5]
  13. [6]]
  14. [1 2 3 4 5 6]
  15. (6,)
  16. [1 2 3 4 5 6]
  17. (6,)

矩阵点积运算 dot()

dot.png

  1. a = np.array([
  2. [1, 2],
  3. [3, 4]
  4. ])
  5. b = np.array([
  6. [5, 6],
  7. [7, 8]
  8. ])
  9. print(a.dot(b))
  10. [[19 22] [43 50]]
  11. print(np.dot(a, b))
  12. [[19 22] [43 50]]

从上面可以看出,你有两种写法。1)直接用一个矩阵 dot 另一个;2)用 np.dot(a, b) 把两个矩阵包起来。

数据统计分析

用 Numpy 做数据分析理所应当,但是如果数据的种类多样的话,推荐用 Pandas 来做分析的. 不过,在数据量比较大的时候,我更喜欢直接 Numpy 来搞,因为 Numpy 的速度还是要比 Pandas 快上不少。
那么什么是数据分析呢?其实也就是在数据中找到你想要的一些变量,总结数据的规律。最简单的当属找到最大值最小值了。 比如上面的身高数据,你想找全班最高和最矮的。

  1. a = np.array([150, 166, 183, 170])
  2. print("最大:", np.max(a))
  3. print("最小:", a.min())
  4. 最大: 183
  5. 最小: 150
  6. print("总共:", a.sum())
  7. 总共: 669
  8. print("累乘:", a.prod())
  9. print("总数:", a.size)
  10. 累乘: 774639000
  11. 总数: 4
  12. print("平均身高:", np.mean(a))
  13. print("身高中位数:", np.median(a))
  14. 平均身高: 167.25
  15. 身高中位数: 168.0
  16. print("标准差:", np.std(a))
  17. 标准差: 11.776565713313877

特殊运算符号

  1. # 天花板的值 地板的值
  2. a = np.array([150.1, 166.4, 183.7, 170.8])
  3. print("ceil:", np.ceil(a)) #取天花板的值
  4. print("floor:", np.floor(a)) #还是地板的值
  5. ceil: [151. 167. 184. 171.]
  6. floor: [150. 166. 183. 170.]
  7. ## 上限下限
  8. a = np.array([150.1, 166.4, 183.7, 170.8])
  9. print("clip:", a.clip(160, 180))
  10. clip: [160. 166.4 180. 170.8]