一:Numpy

  1. # 数组和列表的效率问题,谁优谁劣
  2.  
  3. # 1.循环遍历
  4. import numpy as np
  5. import time
  6. my_arr = np.arange(1000000)
  7. my_list = list(range(1000000))
  8.  
  9. def arr_time(array):
  10. s = time.time()
  11. for _ in array:
  12. _ * 2
  13. e = time.time()
  14. return e - s
  15.  
  16. def list_time(list):
  17. s = time.time()
  18. for _ in list:
  19. _ * 2
  20. e = time.time()
  21. return e - s
  22.  
  23. ret1 = arr_time(my_arr)
  24. print("数组运行的时间是{}".format(ret1))
  25. ret2 = list_time(my_list)
  26. print("列表运行的时间是{}".format(ret2))
  27.  
  28. # 结果
  29. 数组运行的时间是0.2110121250152588 # 遍历,列表快
  30. 列表运行的时间是0.04800271987915039
  31.  
  32. # 2.自身扩容
  33. import numpy as np
  34. import time
  35.  
  36. my_arr = np.arange(1000000)
  37. my_list = list(range(1000000))
  38.  
  39. def arr_time(array):
  40. s = time.time()
  41. for _ in range(10):
  42. array * 2
  43. e = time.time()
  44. return e - s
  45.  
  46. def list_time(list):
  47. s = time.time()
  48. for _ in range(10):
  49. list * 2
  50. e = time.time()
  51. return e - s
  52.  
  53. ret1 = arr_time(my_arr)
  54. print("数组运行的时间是{}".format(ret1))
  55. ret2 = list_time(my_list)
  56. print("列表运行的时间是{}".format(ret2))
  57. # 结果
  58. 数组运行的时间是0.018001317977905273 # 扩容,数组快
  59. 列表运行的时间是0.2950167655944824

numpy处理数据快的原因是:在一个连续的内存块中取存取数据。

1.  numpy中的ndarray:一种多维的数组对象,是一种快速灵活的大数据容器。

创建ndarray:数组的创建最简单的办法就是使用array函数,它接收一切序列型的对象,其中也包括数组。

  1. data = [1,2,3,4,5]
  2. arr1 = np.array(data)
  3. print(arr1)
  4. # [1,2,3,4,5] 将python的列表,转成数组
  1. data = [[1,2,3,4,5],[6,7,8,9,10]]
  2. arr2 = np.array(data)
  3. print(arr2)
  4.  
  5. [[ 1 2 3 4 5]
  6. [ 6 7 8 9 10]]

查看数组的维度和形状

  1. w1 = arr1.ndim # 维度
  2. s1 = arr1.shape # 形状
  3. w2 = arr2.ndim
  4. s2 = arr2.shape
  5. print("数组arr1的维度是{},形状是{}".format(w1,s1))
  6. print("数组arr2的维度是{},形状是{}".format(w2,s2))
  7. 数组arr1的维度是1,形状是(5,)
  8. 数组arr2的维度是2,形状是(2, 5)

其他形式的创建数组

  1. np.zeros(20)
  2.  
  3. # 结果
  4. array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
  5. 0., 0., 0.])
  6.  
  7. np.zeros((3,6))
  8. # 结果
  9. array([[0., 0., 0., 0., 0., 0.],
  10. [0., 0., 0., 0., 0., 0.],
  11. [0., 0., 0., 0., 0., 0.]])
  12.  
  13. np.ones(10)
  1. array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
  2.  
  3. np.ones((3,6))
  1. array([[1., 1., 1., 1., 1., 1.],
  2. [1., 1., 1., 1., 1., 1.],
  3. [1., 1., 1., 1., 1., 1.]])

np.arrange(10)是python中range的数组版本

  1. np.arange(10)
  2. #
  3. array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

2  numpy中的ndarray的数据类型

创建时候指定数据类型

  1. data = [1,2,3,4,5]
  2. arr3 = np.array(data,dtype=np.float64)
  3. print(arr3.dtype)
  4. #
  5. float64

数组数据类型转换

  1. data = [1,2,3,4,5]
  2. arr4 = np.array(data)
  3. print(arr4.dtype)
  4. # int32
  5. float_arr4 = arr4.astype(np.float64)
  6. print(float_arr4.dtype)
  7. # float64

注意:浮点型,转为整形,小数点后面的数组,自动去除,类型与python中的取整。

  1. data = [1.1,2,1,3,1,4,1]
  2. arr5 = np.array(data)
  3. print(arr5.dtype)
  4. int_arr5 = arr5.astype(np.int32)
  5. print(int_arr5.dtype)
  6. #
  7. float64
  8. int32
  9. print(int_arr5)
  10. #
  11. [1 2 1 3 1 4 1]

注意:astype可以将某些全是数值类型的字符串转成数值形式  str = "123456"

  1. demo = ["","",""]
  2. demo_str = np.array(data)
  3. new_demo = demo_str.astype(float)
  4. new_demo
  5. #
  6. array([1.1, 2. , 1. , 3. , 1. , 4. , 1. ]) # 结果很奇怪

二:numpy数组的运算

加减乘除

  1. arr6 = np.array([[1,2,3,4,5],[6,7,8,9,10]])
  2. arr6
  3.  
  4. # 结果
  5. array([[ 1, 2, 3, 4, 5],
  6. [ 6, 7, 8, 9, 10]])
  7.  
  8. arr6 + arr6
  9.  
  10. # 结果
  11. array([[ 2, 4, 6, 8, 10],
  12. [12, 14, 16, 18, 20]])
  13.  
  14. arr6 - arr6
  15.  
  16. # 结果
  17. array([[0, 0, 0, 0, 0],
  18. [0, 0, 0, 0, 0]])
  19.  
  20. arr6 * arr6
  21.  
  22. # 结果
  23. array([[ 1, 4, 9, 16, 25],
  24. [ 36, 49, 64, 81, 100]])
  25.  
  26. 1 / arr6
  27.  
  28. # 结果
  29. array([[1. , 0.5 , 0.33333333, 0.25 , 0.2 ],
  30. [0.16666667, 0.14285714, 0.125 , 0.11111111, 0.1 ]])

数组之间的比值,产生布尔数组

  1. arr6
  2. array([[ 1, 2, 3, 4, 5],
  3. [ 6, 7, 8, 9, 10]])
  4.  
  5. arr7 = np.array([[5,4,1,2,3],[6,8,10,9,7]])
  6. arr7
  7.  
  8. array([[ 5, 4, 1, 2, 3],
  9. [ 6, 8, 10, 9, 7]])
  10.  
  11. arr6 > arr7
  12.  
  13. # 结果
  14. array([[False, False, True, True, True],
  15. [False, False, False, False, True]])

# 数组与常量进行加减乘除,或者数组之间的比较,叫做广播

切片和索引

一维数组的切片和索引

  1. # 一维数组的索引和切片 非常类似于python列表的操作
  2. arr1 = np.arange(10)
  3. arr1
  4. array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
  5. arr1[0]
  6. 0
  7. arr1[0:-1]
  8. array([0, 1, 2, 3, 4, 5, 6, 7, 8])

注意:不同于列表的地方是:

  1. arr1[:] = 0 # 可以对切片进行改值,将范围内的所有元素改成统一值
  2. arr1
  3. array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
  1. arr_slice = arr1[1:3]
  2. arr_slice
  3. array([0, 0])
  4. arr_slice[0] = 1 # 切片不是python字典中的浅拷贝,切片后的元素也是映射到源数组,因此改变切片的内容,也会影响源数组的内容
  5. arr1
  6. array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0])

注意:虽然会影响到源数组,通过复制切片,再进行修改就不会影响到源数组。

  1. arr_slice2 = arr1[1:3].copy()
  2. arr_slice2
  3. array([1, 0])
  4. arr_slice2[0] = 100
  5. arr1
  6. array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0])

高维数组的切片和索引:高维数组的索引,不在是数,而是一个数组

二维数组

  1. arr2 = np.array([[1,3],[2,4]])
  2. arr2
  3. array([[1, 3],
  4. [2, 4]])
  5. arr2[0]
  6. array([1, 3])
  7. arr2[1]
  8. array([2, 4])
    arr2[1][0]
    2
    arr2[1][1]
    4

三维数组

  1. arr3 = np.array([[[1,2,1],[3,4,3],[5,6,5]]])
  2. arr3
  3.  
  4. array([[[1, 2, 1],
  5. [3, 4, 3],
  6. [5, 6, 5]]])
  7.  
  8. arr3[0]
  9.  
  10. array([[1, 2, 1],
  11. [3, 4, 3],
  12. [5, 6, 5]])
  13.  
  14. arr3[1]
  15. ---------------------------------------------------------------------------
  16. IndexError Traceback (most recent call last)
  17. <ipython-input-100-cac0cac14f9a> in <module>
  18. ----> 1 arr3[1]
  19.  
  20. IndexError: index 1 is out of bounds for axis 0 with size 1
  21.  
  22. # 因为arr3不是这种结构[[ [],[],[] ],[ [],[],[] ],[ [],[],[] ],[ [],[],[] ]]
  23. arr3[0] 只能取,第一个二维索引,arr3中也只有一个二维索引,1会越界。

注意:arr3[0] 可以用标量和数组进行赋值

  1. arr3[0] = 1
  2. arr3
  3. array([[[1, 1, 1],
  4. [1, 1, 1],
  5. [1, 1, 1]]])
  1. arr3[0] = [[0,0,0],[0,0,0],[0,0,0]]
  2. arr3
  3. array([[[0, 0, 0],
  4. [0, 0, 0],
  5. [0, 0, 0]]])

注意:三维数组的连续索引

  1. arr3[0][1]
  2. array([0, 0, 0])
  3.  
  4. arr3[0,1] # 等价于上面一个
  5. array([0, 0, 0])

二维数组的切片

  1. arr = np.array([[1,2,3],[4,5,6],[7,8,9],[9,8,7],[6,5,4],[3,2,1]])
  2. arr
  3. array([[1, 2, 3],
  4. [4, 5, 6],
  5. [7, 8, 9],
  6. [9, 8, 7],
  7. [6, 5, 4],
  8. [3, 2, 1]])
  9.  
  10. arr[:3] # 这种形式的切片是按照x,也就是行,进行切片的。
  11.  
  12. array([[1, 2, 3],
  13. [4, 5, 6],
  14. [7, 8, 9]])
  1. arr = np.array([[1,2,3],[4,5,6],[7,8,9],[9,8,7],[6,5,4],[3,2,1]])
  2. arr
  3. array([[1, 2, 3],
  4. [4, 5, 6],
  5. [7, 8, 9],
  6. [9, 8, 7],
  7. [6, 5, 4],
  8. [3, 2, 1]])
  9.  
  10. arr[:3]
  11.  
  12. array([[1, 2, 3],
  13. [4, 5, 6],
  14. [7, 8, 9]])
  15.  
  16. # 连续按照x轴,即行进行切,第二次切是对每一个一维数组进行切片。
  17.  
  18. arr[:3,1:]
  19. array([[2, 3],
  20. [5, 6],
  21. [8, 9]])

二维数组来说切片 [控制行,控制列]

  1. import numpy as np
  2. import time
  3. arr1 = np.array([[1,2,3],[4,5,6],[7,8,9]])
  4. arr1[1,:2] # 第二行的前两列
  5. #结果
  6. array([4, 5])
  7. arr1[:2,2] # 第三列的前两行
  8. #结果
  9. array([3, 6])
  1. arr1 = np.array([[1,2,3],[4,5,6],[7,8,9]])
  2. arr1[:,1:] # 所有行的第一列之后的所有 :表示所有
  3. # 结果
  4. array([[2, 3],
  5. [5, 6],
  6. [8, 9]])
  1. arr1[1:,:] # 所有列的第一行到所有
  2. # 结果
  3. array([[4, 5, 6],
  4. [7, 8, 9]])

二维切片的赋值也会广播到所有元素

  1. arr1[1:,:] = 100
  2. arr1
  3. # 结果
  4. array([[ 1, 2, 3],
  5. [100, 100, 100],
  6. [100, 100, 100]])

 布尔值索引

  1. arr1 = np.array(["a","b","c","d","e","f","h"])
  2. arr1
  3. # 结果
  4. array(['a', 'b', 'c', 'd', 'e', 'f', 'h'], dtype='<U1')
  5.  
  6. data = np.random.randn(7,4) # 生成指定维度的列表,randn函数返回一个或一组样本,具有标准正态分布
  7. data
  8.  
  9. # 结果
  10. array([[ 0.58942085, -0.68523013, -0.5892267 , -0.97875538],
  11. [ 0.15429648, 1.56280897, 1.71407167, -0.91513437],
  12. [ 1.88318536, -1.04312503, 0.22774029, 0.72447885],
  13. [-0.14408123, 0.0250038 , 0.47380685, 1.67780702],
  14. [-0.85254544, 0.6399932 , -0.63439896, 3.21059215],
  15. [ 0.82560976, 0.84780371, 1.34085735, -0.54620446],
  16. [ 0.60466595, 0.64945024, -0.76053927, -0.4420415 ]])
  17.  
  18. arr1 == "a"
  19. #结果
  20. array([ True, False, False, False, False, False, False])
  21.  
  22. data[arr1=="a"]
  23. # 结果
  24. array([[ 0.58942085, -0.68523013, -0.5892267 , -0.97875538]]) # 第一个为True,所以只显示第一行

关于np.random随机生成数组的其他用法

  1. np.random.rand(4,3,2) # 生成三维数组,4---包含四行,每行都是一个二维数组,3---包含三行,每个二维数组都是由三行一维数组组成,2---每个一维数组,包含二行,即二个元素。
  2. # 结果
  3. array([[[0.45843663, 0.30801374],
  4. [0.50365738, 0.49775572],
  5. [0.86671448, 0.83116069]],
  6.  
  7. [[0.26553277, 0.06815584],
  8. [0.72355103, 0.65145712],
  9. [0.18559103, 0.77389285]],
  10.  
  11. [[0.59710693, 0.4073068 ],
  12. [0.13812524, 0.16268339],
  13. [0.92289371, 0.45529381]],
  14.  
  15. [[0.51111361, 0.63368562],
  16. [0.93192965, 0.08373171],
  17. [0.97425054, 0.53798492]]])
  18.  
  19. np.random.rand(4,3,3)
  20.  
  21. # 结果
  22. array([[[0.66847835, 0.96393834, 0.68099953],
  23. [0.27228911, 0.01407302, 0.1067194 ],
  24. [0.62624735, 0.58379371, 0.85244324]],
  25.  
  26. [[0.15541881, 0.66438894, 0.92232019],
  27. [0.26811429, 0.13868821, 0.50579811],
  28. [0.55399624, 0.12154676, 0.06532324]],
  29.  
  30. [[0.21546971, 0.10701104, 0.98175299],
  31. [0.5240603 , 0.58015531, 0.65979757],
  32. [0.4755814 , 0.34118265, 0.93017974]],
  33.  
  34. [[0.87136945, 0.8724195 , 0.13122896],
  35. [0.84908535, 0.50701899, 0.24765703],
  36. [0.28119896, 0.76037353, 0.94389406]]])
  1. data[arr1!="a"]
  2. # 结果
  3. array([[ 0.15429648, 1.56280897, 1.71407167, -0.91513437],
  4. [ 1.88318536, -1.04312503, 0.22774029, 0.72447885],
  5. [-0.14408123, 0.0250038 , 0.47380685, 1.67780702],
  6. [-0.85254544, 0.6399932 , -0.63439896, 3.21059215],
  7. [ 0.82560976, 0.84780371, 1.34085735, -0.54620446],
  8. [ 0.60466595, 0.64945024, -0.76053927, -0.4420415 ]])

 ~非得意思:cont = arr1 == "a"  ~cont就是条件取反的意思

  1. cont = arr1 != "a"
  2. data[cont]
  3. # 结果
  4. array([[ 0.15429648, 1.56280897, 1.71407167, -0.91513437],
  5. [ 1.88318536, -1.04312503, 0.22774029, 0.72447885],
  6. [-0.14408123, 0.0250038 , 0.47380685, 1.67780702],
  7. [-0.85254544, 0.6399932 , -0.63439896, 3.21059215],
  8. [ 0.82560976, 0.84780371, 1.34085735, -0.54620446],
  9. [ 0.60466595, 0.64945024, -0.76053927, -0.4420415 ]])
  10.  
  11. data[~cont]
  12. # 结果
  13. array([[ 0.58942085, -0.68523013, -0.5892267 , -0.97875538]])

布尔值的用处

1.让整个数组里面所有小于0的元素全部变成0

  1. data
  2.  
  3. # 结果
  4. array([[ 0.58942085, -0.68523013, -0.5892267 , -0.97875538],
  5. [ 0.15429648, 1.56280897, 1.71407167, -0.91513437],
  6. [ 1.88318536, -1.04312503, 0.22774029, 0.72447885],
  7. [-0.14408123, 0.0250038 , 0.47380685, 1.67780702],
  8. [-0.85254544, 0.6399932 , -0.63439896, 3.21059215],
  9. [ 0.82560976, 0.84780371, 1.34085735, -0.54620446],
  10. [ 0.60466595, 0.64945024, -0.76053927, -0.4420415 ]])
  11.  
  12. data[data<0] =0
  13. data
  14.  
  15. # 结果
  16. array([[0.58942085, 0. , 0. , 0. ],
  17. [0.15429648, 1.56280897, 1.71407167, 0. ],
  18. [1.88318536, 0. , 0.22774029, 0.72447885],
  19. [0. , 0.0250038 , 0.47380685, 1.67780702],
  20. [0. , 0.6399932 , 0. , 3.21059215],
  21. [0.82560976, 0.84780371, 1.34085735, 0. ],
  22. [0.60466595, 0.64945024, 0. , 0. ]])

&和的意思,类似于and:

  1. data
  2. # 结果
  3. array([[ 0.58942085, -0.68523013, -0.5892267 , -0.97875538],
  4. [ 0.15429648, 1.56280897, 1.71407167, -0.91513437],
  5. [ 1.88318536, -1.04312503, 0.22774029, 0.72447885],
  6. [-0.14408123, 0.0250038 , 0.47380685, 1.67780702],
  7. [-0.85254544, 0.6399932 , -0.63439896, 3.21059215],
  8. [ 0.82560976, 0.84780371, 1.34085735, -0.54620446],
  9. [ 0.60466595, 0.64945024, -0.76053927, -0.4420415 ]])
  10.  
  11. # 将里面大于0小于1的数字变成0
  12.  
  13. data[(data>0) & (data<1)] = 0
  14. data
  15.  
  16. # 结果
  17. array([[0. , 0. , 0. , 0. ],
  18. [0. , 1.56280897, 1.71407167, 0. ],
  19. [1.88318536, 0. , 0. , 0. ],
  20. [0. , 0. , 0. , 1.67780702],
  21. [0. , 0. , 0. , 3.21059215],
  22. [0. , 0. , 1.34085735, 0. ],
  23. [0. , 0. , 0. , 0. ]])

 | 或的意思,类似于 or

  1. data
  2.  
  3. # 结果
  4. array([[ 0.58942085, -0.68523013, -0.5892267 , -0.97875538],
  5. [ 0.15429648, 1.56280897, 1.71407167, -0.91513437],
  6. [ 1.88318536, -1.04312503, 0.22774029, 0.72447885],
  7. [-0.14408123, 0.0250038 , 0.47380685, 1.67780702],
  8. [-0.85254544, 0.6399932 , -0.63439896, 3.21059215],
  9. [ 0.82560976, 0.84780371, 1.34085735, -0.54620446],
  10. [ 0.60466595, 0.64945024, -0.76053927, -0.4420415 ]])
  11.  
  12. 将小于0或者大于1的数修改为1
  13.  
  14. data[(data<0) | (data>1)] = 1
  15. data
  16. # 结果
  17. array([[1. , 1. , 0.59208795, 1. ],
  18. [1. , 1. , 1. , 1. ],
  19. [1. , 0.0701599 , 1. , 0.15396346],
  20. [1. , 1. , 1. , 0.2735209 ],
  21. [1. , 1. , 1. , 1. ],
  22. [1. , 1. , 1. , 0.06469213],
  23. [1. , 1. , 1. , 1. ]])

 花式索引

np.empty()返回一个随机元素的矩阵,大小按照参数定义。不是字面意思上的空数组,需要自己调整参数。

  1. data = np.empty((8,4)) # 本意想生成8行4列的二维空数组
  2. data
  3. # 结果
  4. array([[9.34e-322, 0.00e+000, 0.00e+000, 0.00e+000],
  5. [0.00e+000, 0.00e+000, 0.00e+000, 0.00e+000],
  6. [0.00e+000, 0.00e+000, 0.00e+000, 0.00e+000],
  7. [0.00e+000, 0.00e+000, 0.00e+000, 0.00e+000],
  8. [0.00e+000, 0.00e+000, 0.00e+000, 0.00e+000],
  9. [0.00e+000, 0.00e+000, 0.00e+000, 0.00e+000],
  10. [0.00e+000, 0.00e+000, 0.00e+000, 0.00e+000],
  11. [0.00e+000, 0.00e+000, 0.00e+000, 0.00e+000]])
  12.  
  13. # 空数组需要手动调整
  14.  
  15. for i in range(8):
  16. data[i] = 0
  17.  
  18. data
  19.  
  20. #结果
  21. array([[0., 0., 0., 0.],
  22. [0., 0., 0., 0.],
  23. [0., 0., 0., 0.],
  24. [0., 0., 0., 0.],
  25. [0., 0., 0., 0.],
  26. [0., 0., 0., 0.],
  27. [0., 0., 0., 0.],
  28. [0., 0., 0., 0.]])

 索引数组:按照顺序返回结果

  1. for i in range(8):
  2. data[i] = i
  3.  
  4. data
  5. # 结果
  6.  
  7. array([[0., 0., 0., 0.],
  8. [1., 1., 1., 1.],
  9. [2., 2., 2., 2.],
  10. [3., 3., 3., 3.],
  11. [4., 4., 4., 4.],
  12. [5., 5., 5., 5.],
  13. [6., 6., 6., 6.],
  14. [7., 7., 7., 7.]])
  15.  
  16. # 按照顺序取出,每一行
  17. data[[0,2,4,6]] data[[索引值]]
  18. # 结果
  19. array([[0., 0., 0., 0.],
  20. [2., 2., 2., 2.],
  21. [4., 4., 4., 4.],
  22. [6., 6., 6., 6.]])
    # 另一种方式
  1. data[[i for i in range(len(data)) if i % 2 == 0]]
    data
    # 结果

 array([[0., 0., 0., 0.],
      [2., 2., 2., 2.],
     [4., 4., 4., 4.],
     [6., 6., 6., 6.]])

多个索引数组:以二维为例,返回的是一个一维数组

  1. data = np.arange(32)
  2. data
  3. array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
  4. 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31])
  5. data = data.reshape(8,4)
  6. data
  7. array([[ 0, 1, 2, ],
  8. [ 4, 5, 6, 7],
  9. [ 8, 9, , 11],
  10. [12, 13, 14, 15],
  11. [16, , 18, 19],
  12. [20, 21, 22, 23],
  13. [, 25, 26, 27],
  14. [28, 29, 30, 31]])
  15. data[[0,2,4,6],[3,2,1,0]]
  16. array([ 3, 10, 17, 24])
    # 二维最终选出的数其实是 (0,3),(2,2),(4,1),(6,0)组成的一维数组

数组的转置

  1. data = np.arange(15).reshape(3,5)
  2. data
  3. # 结果
  4. array([[ 0, 1, 2, 3, 4],
  5. [ 5, 6, 7, 8, 9],
  6. [10, 11, 12, 13, 14]])
  7.  
  8. data.T
  9. array([[ 0, 5, 10],
  10. [ 1, 6, 11],
  11. [ 2, 7, 12],
  12. [ 3, 8, 13],
  13. [ 4, 9, 14]])
  14.  
  15. 行变成列或列变行

矩阵的內积,A*A^T

  1. ret1 = np.dot(data,data.T) 3*5 5*3 --- 3*3
  2. ret1
  3. array([[ 30, 80, 130], # 30 = (0*0 + 1*1 + 2*2 + 3*3 + 4*4)
  4. [ 80, 255, 430],
  5. [130, 430, 730]])
  6. ret2 = np.dot(data.T,data) 5*3 3*5 --- 5*5 # 內积的正确方法
  7. ret2
  8. array([[125, 140, 155, 170, 185],
  9. [140, 158, 176, 194, 212],
  10. [155, 176, 197, 218, 239],
  11. [170, 194, 218, 242, 266],
  12. [185, 212, 239, 266, 293]])

高维数组的轴对换

  1. data = np.arange(16).reshape((2,2,4))
  2. data
  3. # 结果
  4. array([[[ 0, 1, 2, 3],
  5. [ 4, 5, 6, 7]],
  6.  
  7. [[ 8, 9, 10, 11],
  8. [12, 13, 14, 15]]])
  9.  
  10. data.transpose((1,0,2))
  11. data
  12. # 结果
  13. array([[[ 0, 1, 2, 3],
  14. [ 8, 9, 10, 11]],
  15.  
  16. [[ 4, 5, 6, 7],
  17. [12, 13, 14, 15]]])
  18.  
  19. 解析:其中正确的应该是(0,1,2)分别表示(x,y,z)(1,0,2)表明x轴和y轴进行了调换
  20.  
  21. 那么导致索引值变化:
  22. data[0,0] --->data[0,0]
  23. data[0,1] --->data[1,0]
  24. data[1,0] --->data[0,1]
  25. data[1,1] --->data[1,1]
  26.  
  27. data.transpose((2,1,0)) 表示x轴和z轴进行了变换。
  28. x轴和z后就牵扯到结构的变化和,原来的结构是2*2*4--二行二维数组,每个二维数组里面有两行一维数组,每个一维数组里面有四行数据。
  29.  
  30. 22, 4 的结构变成了 4, 2, 2
  31.  
  32. [
  33. [[],[]],
  34. [[],[]],
  35. [[],[]],
  36. [[],[]],
  37.  
  38. ]
  39.  
  40. 结构变化后,然后开始赋值,data[0][1][1] = 5变成了 data[1][1][0] = 5
  41.  
  42. [
  43. [[],[]],
  44. [[],[5]],
  45. [[],[]],
  46. [[],[]],
  47.  
  48. ]
  49. 原来的data[1][1][0] = 12 变成了 data[0][1][1] = 12
  50.  
  51. [
  52. [[],[12]],
  53. [[],[5]],
  54. [[],[]],
  55. [[],[]],
  56. ]
  57. 以此类推的出变化后的值
  58.  
  59. array([[[ 0, 1],
  60. [ 2, 3]],
  61.  
  62. [[ 4, 5],
  63. [ 6, 7]],
  64.  
  65. [[ 8, 9],
  66. [10, 11]],
  67.  
  68. [[12, 13],
  69. [14, 15]]])
  70.  
  71. 总结:和Z轴相关的变换都需换换结构,然后在改变索引值。

swapaxes的轴对换:简写模式  swapaxes(1,2)  就是y轴和z轴进行变换。data[0][1][0]的值就变成data[0][0][1]的值

  1. data = np.arange(,).reshape(,,)
  2. data
  3. # 结果
  4. array([[[ , , , ],
  5. [ , , , ]],
  6.  
  7. [[ , , , ],
  8. [, , , ]]])
  9.  
  10. data.swapaxes(,)
  11. # 结果
  12. array([[[ , ],
  13. [ , ],
  14. [ , ],
  15. [ , ]],
  16.  
  17. [[ , ],
  18. [ , ],
  19. [, ],
  20. [, ]]])
  21.  
  22. 第一步,shape(,,)经过y轴和z轴的变换,形状变成shape(,,)---变形状
  23.  
  24. 【[[],
  25. [],
  26. [],
  27. []],
  28. [[],
  29. [],
  30. [],
  31. []]】
  32.  
  33. 第二步,值变换,data[][][]的值变成data[][][]的值,经过所有的值变换,得到结果---变值

总结:轴变换的步骤,先根据函数(参数)变形状,然后变值

2.通用函数:快速的元素级数组函数

  就是对ndarray的数据进行元素级 操作的函数,接收一个或多个标量值,并返回一个或多个标量值。ufunc

sqrt函数  对每个元素进行二次开方操作 二次根号下

  1. data = np.arange(,)
  2. data
  3. # 结果
  4. array([ , , , , , , , , , , , , , , , ])
  5.  
  6. np.sqrt(data)
  7. # 结果
  8. array([. , . , 1.41421356, 1.73205081, . ,
  9. 2.23606798, 2.44948974, 2.64575131, 2.82842712, . ,
  10. 3.16227766, 3.31662479, 3.46410162, 3.60555128, 3.74165739,
  11. 3.87298335])

exp函数:exp,高等数学里以自然常数e为底的指数函数;Exp:返回e的n次方,e是一个常数为2.71828;Exp 函数 返回 e(自然对数的底)的幂次方。

  1. np.exp(data)
  2. # 结果
  3. array([1.00000000e+00, 2.71828183e+00, 7.38905610e+00, 2.00855369e+01,
  4. 5.45981500e+01, 1.48413159e+02, 4.03428793e+02, 1.09663316e+03,
  5. 2.98095799e+03, 8.10308393e+03, 2.20264658e+04, 5.98741417e+04,
  6. 1.62754791e+05, 4.42413392e+05, 1.20260428e+06, 3.26901737e+06])

二元ufunc:接收两个数组参数

  1. x = np.random.randn(8)
  2. x
  3. # 结果
  4. array([-2.15378687, 0.81808891, 1.03173227, -1.38834899, -0.25440583,
  5. 0.15042907, 0.78186255, -1.56663501])
  6.  
  7. y = np.random.randn(8)
  8. y
  9. # 结果
  10. array([ 0.99923527, -0.05346302, 0.36369126, -1.14881998, 1.13355945,
  11. 0.37692407, -0.00560708, 0.24598121])
  12.  
  13. np.maximum(x,y)
  14. # 结果
  15. array([ 0.99923527, -0.05346302, 0.36369126, 1.50986447, 1.32350916,
  16. 0.37692407, 0.13424535, 0.44801383])

# 函数方面未整理完全--TODO

3.利用数据进行数据处理

  一般处理数组,需要循环数组,对每个元素进行处理,但是数组表达式可以代替循环的做法

例如:在一组值(网格型)上计算函数sqrt(x^2 + y^2)。np.meshgrid函数接收两个一维数组,并产生两个二维矩阵(对应连个数组中的所有(x,y)对):

  1. import numpy as np
  2. points = np.arange(-5,5,0.01)
  3. points
  4. # 结果
  5. array([-5.0000000e+00, -4.9900000e+00, -4.9800000e+00, -4.9700000e+00,
  6. -4.9600000e+00, -4.9500000e+00, -4.9400000e+00, -4.9300000e+00,
  7. -4.9200000e+00, -4.9100000e+00, -4.9000000e+00, -4.8900000e+00,
  8. -4.8800000e+00, -4.8700000e+00, -4.8600000e+00, -4.8500000e+00,
  9. -4.8400000e+00, -4.8300000e+00, -4.8200000e+00, -4.8100000e+00,
  10. -4.8000000e+00, -4.7900000e+00, -4.7800000e+00, -4.7700000e+00,
  11. -4.7600000e+00, -4.7500000e+00, -4.7400000e+00, -4.7300000e+00,
  12. -4.7200000e+00, -4.7100000e+00, -4.7000000e+00, -4.6900000e+00,
  13. -4.6800000e+00, -4.6700000e+00, -4.6600000e+00, -4.6500000e+00,
  14. -4.6400000e+00, -4.6300000e+00, -4.6200000e+00, -4.6100000e+00,
  15. -4.6000000e+00, -4.5900000e+00, -4.5800000e+00, -4.5700000e+00,
  16. -4.5600000e+00, -4.5500000e+00, -4.5400000e+00, -4.5300000e+00,
  17. -4.5200000e+00, -4.5100000e+00, -4.5000000e+00, -4.4900000e+00,
  18. -4.4800000e+00, -4.4700000e+00, -4.4600000e+00, -4.4500000e+00,
  19. -4.4400000e+00, -4.4300000e+00, -4.4200000e+00, -4.4100000e+00,
  20. -4.4000000e+00, -4.3900000e+00, -4.3800000e+00, -4.3700000e+00,
  21. -4.3600000e+00, -4.3500000e+00, -4.3400000e+00, -4.3300000e+00,
  22. -4.3200000e+00, -4.3100000e+00, -4.3000000e+00, -4.2900000e+00,
  23. -4.2800000e+00, -4.2700000e+00, -4.2600000e+00, -4.2500000e+00,
  24. -4.2400000e+00, -4.2300000e+00, -4.2200000e+00, -4.2100000e+00,
  25. -4.2000000e+00, -4.1900000e+00, -4.1800000e+00, -4.1700000e+00,
  26. -4.1600000e+00, -4.1500000e+00, -4.1400000e+00, -4.1300000e+00,
  27. -4.1200000e+00, -4.1100000e+00, -4.1000000e+00, -4.0900000e+00,
  28. -4.0800000e+00, -4.0700000e+00, -4.0600000e+00, -4.0500000e+00,
  29. -4.0400000e+00, -4.0300000e+00, -4.0200000e+00, -4.0100000e+00,
  30. -4.0000000e+00, -3.9900000e+00, -3.9800000e+00, -3.9700000e+00,
  31. -3.9600000e+00, -3.9500000e+00, -3.9400000e+00, -3.9300000e+00,
  32. -3.9200000e+00, -3.9100000e+00, -3.9000000e+00, -3.8900000e+00,
  33. -3.8800000e+00, -3.8700000e+00, -3.8600000e+00, -3.8500000e+00,
  34. -3.8400000e+00, -3.8300000e+00, -3.8200000e+00, -3.8100000e+00,
  35. -3.8000000e+00, -3.7900000e+00, -3.7800000e+00, -3.7700000e+00,
  36. -3.7600000e+00, -3.7500000e+00, -3.7400000e+00, -3.7300000e+00,
  37. -3.7200000e+00, -3.7100000e+00, -3.7000000e+00, -3.6900000e+00,
  38. -3.6800000e+00, -3.6700000e+00, -3.6600000e+00, -3.6500000e+00,
  39. -3.6400000e+00, -3.6300000e+00, -3.6200000e+00, -3.6100000e+00,
  40. -3.6000000e+00, -3.5900000e+00, -3.5800000e+00, -3.5700000e+00,
  41. -3.5600000e+00, -3.5500000e+00, -3.5400000e+00, -3.5300000e+00,
  42. -3.5200000e+00, -3.5100000e+00, -3.5000000e+00, -3.4900000e+00,
  43. -3.4800000e+00, -3.4700000e+00, -3.4600000e+00, -3.4500000e+00,
  44. -3.4400000e+00, -3.4300000e+00, -3.4200000e+00, -3.4100000e+00,
  45. -3.4000000e+00, -3.3900000e+00, -3.3800000e+00, -3.3700000e+00,
  46. -3.3600000e+00, -3.3500000e+00, -3.3400000e+00, -3.3300000e+00,
  47. -3.3200000e+00, -3.3100000e+00, -3.3000000e+00, -3.2900000e+00,
  48. -3.2800000e+00, -3.2700000e+00, -3.2600000e+00, -3.2500000e+00,
  49. -3.2400000e+00, -3.2300000e+00, -3.2200000e+00, -3.2100000e+00,
  50. -3.2000000e+00, -3.1900000e+00, -3.1800000e+00, -3.1700000e+00,
  51. -3.1600000e+00, -3.1500000e+00, -3.1400000e+00, -3.1300000e+00,
  52. -3.1200000e+00, -3.1100000e+00, -3.1000000e+00, -3.0900000e+00,
  53. -3.0800000e+00, -3.0700000e+00, -3.0600000e+00, -3.0500000e+00,
  54. -3.0400000e+00, -3.0300000e+00, -3.0200000e+00, -3.0100000e+00,
  55. -3.0000000e+00, -2.9900000e+00, -2.9800000e+00, -2.9700000e+00,
  56. -2.9600000e+00, -2.9500000e+00, -2.9400000e+00, -2.9300000e+00,
  57. -2.9200000e+00, -2.9100000e+00, -2.9000000e+00, -2.8900000e+00,
  58. -2.8800000e+00, -2.8700000e+00, -2.8600000e+00, -2.8500000e+00,
  59. -2.8400000e+00, -2.8300000e+00, -2.8200000e+00, -2.8100000e+00,
  60. -2.8000000e+00, -2.7900000e+00, -2.7800000e+00, -2.7700000e+00,
  61. -2.7600000e+00, -2.7500000e+00, -2.7400000e+00, -2.7300000e+00,
  62. -2.7200000e+00, -2.7100000e+00, -2.7000000e+00, -2.6900000e+00,
  63. -2.6800000e+00, -2.6700000e+00, -2.6600000e+00, -2.6500000e+00,
  64. -2.6400000e+00, -2.6300000e+00, -2.6200000e+00, -2.6100000e+00,
  65. -2.6000000e+00, -2.5900000e+00, -2.5800000e+00, -2.5700000e+00,
  66. -2.5600000e+00, -2.5500000e+00, -2.5400000e+00, -2.5300000e+00,
  67. -2.5200000e+00, -2.5100000e+00, -2.5000000e+00, -2.4900000e+00,
  68. -2.4800000e+00, -2.4700000e+00, -2.4600000e+00, -2.4500000e+00,
  69. -2.4400000e+00, -2.4300000e+00, -2.4200000e+00, -2.4100000e+00,
  70. -2.4000000e+00, -2.3900000e+00, -2.3800000e+00, -2.3700000e+00,
  71. -2.3600000e+00, -2.3500000e+00, -2.3400000e+00, -2.3300000e+00,
  72. -2.3200000e+00, -2.3100000e+00, -2.3000000e+00, -2.2900000e+00,
  73. -2.2800000e+00, -2.2700000e+00, -2.2600000e+00, -2.2500000e+00,
  74. -2.2400000e+00, -2.2300000e+00, -2.2200000e+00, -2.2100000e+00,
  75. -2.2000000e+00, -2.1900000e+00, -2.1800000e+00, -2.1700000e+00,
  76. -2.1600000e+00, -2.1500000e+00, -2.1400000e+00, -2.1300000e+00,
  77. -2.1200000e+00, -2.1100000e+00, -2.1000000e+00, -2.0900000e+00,
  78. -2.0800000e+00, -2.0700000e+00, -2.0600000e+00, -2.0500000e+00,
  79. -2.0400000e+00, -2.0300000e+00, -2.0200000e+00, -2.0100000e+00,
  80. -2.0000000e+00, -1.9900000e+00, -1.9800000e+00, -1.9700000e+00,
  81. -1.9600000e+00, -1.9500000e+00, -1.9400000e+00, -1.9300000e+00,
  82. -1.9200000e+00, -1.9100000e+00, -1.9000000e+00, -1.8900000e+00,
  83. -1.8800000e+00, -1.8700000e+00, -1.8600000e+00, -1.8500000e+00,
  84. -1.8400000e+00, -1.8300000e+00, -1.8200000e+00, -1.8100000e+00,
  85. -1.8000000e+00, -1.7900000e+00, -1.7800000e+00, -1.7700000e+00,
  86. -1.7600000e+00, -1.7500000e+00, -1.7400000e+00, -1.7300000e+00,
  87. -1.7200000e+00, -1.7100000e+00, -1.7000000e+00, -1.6900000e+00,
  88. -1.6800000e+00, -1.6700000e+00, -1.6600000e+00, -1.6500000e+00,
  89. -1.6400000e+00, -1.6300000e+00, -1.6200000e+00, -1.6100000e+00,
  90. -1.6000000e+00, -1.5900000e+00, -1.5800000e+00, -1.5700000e+00,
  91. -1.5600000e+00, -1.5500000e+00, -1.5400000e+00, -1.5300000e+00,
  92. -1.5200000e+00, -1.5100000e+00, -1.5000000e+00, -1.4900000e+00,
  93. -1.4800000e+00, -1.4700000e+00, -1.4600000e+00, -1.4500000e+00,
  94. -1.4400000e+00, -1.4300000e+00, -1.4200000e+00, -1.4100000e+00,
  95. -1.4000000e+00, -1.3900000e+00, -1.3800000e+00, -1.3700000e+00,
  96. -1.3600000e+00, -1.3500000e+00, -1.3400000e+00, -1.3300000e+00,
  97. -1.3200000e+00, -1.3100000e+00, -1.3000000e+00, -1.2900000e+00,
  98. -1.2800000e+00, -1.2700000e+00, -1.2600000e+00, -1.2500000e+00,
  99. -1.2400000e+00, -1.2300000e+00, -1.2200000e+00, -1.2100000e+00,
  100. -1.2000000e+00, -1.1900000e+00, -1.1800000e+00, -1.1700000e+00,
  101. -1.1600000e+00, -1.1500000e+00, -1.1400000e+00, -1.1300000e+00,
  102. -1.1200000e+00, -1.1100000e+00, -1.1000000e+00, -1.0900000e+00,
  103. -1.0800000e+00, -1.0700000e+00, -1.0600000e+00, -1.0500000e+00,
  104. -1.0400000e+00, -1.0300000e+00, -1.0200000e+00, -1.0100000e+00,
  105. -1.0000000e+00, -9.9000000e-01, -9.8000000e-01, -9.7000000e-01,
  106. -9.6000000e-01, -9.5000000e-01, -9.4000000e-01, -9.3000000e-01,
  107. -9.2000000e-01, -9.1000000e-01, -9.0000000e-01, -8.9000000e-01,
  108. -8.8000000e-01, -8.7000000e-01, -8.6000000e-01, -8.5000000e-01,
  109. -8.4000000e-01, -8.3000000e-01, -8.2000000e-01, -8.1000000e-01,
  110. -8.0000000e-01, -7.9000000e-01, -7.8000000e-01, -7.7000000e-01,
  111. -7.6000000e-01, -7.5000000e-01, -7.4000000e-01, -7.3000000e-01,
  112. -7.2000000e-01, -7.1000000e-01, -7.0000000e-01, -6.9000000e-01,
  113. -6.8000000e-01, -6.7000000e-01, -6.6000000e-01, -6.5000000e-01,
  114. -6.4000000e-01, -6.3000000e-01, -6.2000000e-01, -6.1000000e-01,
  115. -6.0000000e-01, -5.9000000e-01, -5.8000000e-01, -5.7000000e-01,
  116. -5.6000000e-01, -5.5000000e-01, -5.4000000e-01, -5.3000000e-01,
  117. -5.2000000e-01, -5.1000000e-01, -5.0000000e-01, -4.9000000e-01,
  118. -4.8000000e-01, -4.7000000e-01, -4.6000000e-01, -4.5000000e-01,
  119. -4.4000000e-01, -4.3000000e-01, -4.2000000e-01, -4.1000000e-01,
  120. -4.0000000e-01, -3.9000000e-01, -3.8000000e-01, -3.7000000e-01,
  121. -3.6000000e-01, -3.5000000e-01, -3.4000000e-01, -3.3000000e-01,
  122. -3.2000000e-01, -3.1000000e-01, -3.0000000e-01, -2.9000000e-01,
  123. -2.8000000e-01, -2.7000000e-01, -2.6000000e-01, -2.5000000e-01,
  124. -2.4000000e-01, -2.3000000e-01, -2.2000000e-01, -2.1000000e-01,
  125. -2.0000000e-01, -1.9000000e-01, -1.8000000e-01, -1.7000000e-01,
  126. -1.6000000e-01, -1.5000000e-01, -1.4000000e-01, -1.3000000e-01,
  127. -1.2000000e-01, -1.1000000e-01, -1.0000000e-01, -9.0000000e-02,
  128. -8.0000000e-02, -7.0000000e-02, -6.0000000e-02, -5.0000000e-02,
  129. -4.0000000e-02, -3.0000000e-02, -2.0000000e-02, -1.0000000e-02,
  130. -1.0658141e-13, 1.0000000e-02, 2.0000000e-02, 3.0000000e-02,
  131. 4.0000000e-02, 5.0000000e-02, 6.0000000e-02, 7.0000000e-02,
  132. 8.0000000e-02, 9.0000000e-02, 1.0000000e-01, 1.1000000e-01,
  133. 1.2000000e-01, 1.3000000e-01, 1.4000000e-01, 1.5000000e-01,
  134. 1.6000000e-01, 1.7000000e-01, 1.8000000e-01, 1.9000000e-01,
  135. 2.0000000e-01, 2.1000000e-01, 2.2000000e-01, 2.3000000e-01,
  136. 2.4000000e-01, 2.5000000e-01, 2.6000000e-01, 2.7000000e-01,
  137. 2.8000000e-01, 2.9000000e-01, 3.0000000e-01, 3.1000000e-01,
  138. 3.2000000e-01, 3.3000000e-01, 3.4000000e-01, 3.5000000e-01,
  139. 3.6000000e-01, 3.7000000e-01, 3.8000000e-01, 3.9000000e-01,
  140. 4.0000000e-01, 4.1000000e-01, 4.2000000e-01, 4.3000000e-01,
  141. 4.4000000e-01, 4.5000000e-01, 4.6000000e-01, 4.7000000e-01,
  142. 4.8000000e-01, 4.9000000e-01, 5.0000000e-01, 5.1000000e-01,
  143. 5.2000000e-01, 5.3000000e-01, 5.4000000e-01, 5.5000000e-01,
  144. 5.6000000e-01, 5.7000000e-01, 5.8000000e-01, 5.9000000e-01,
  145. 6.0000000e-01, 6.1000000e-01, 6.2000000e-01, 6.3000000e-01,
  146. 6.4000000e-01, 6.5000000e-01, 6.6000000e-01, 6.7000000e-01,
  147. 6.8000000e-01, 6.9000000e-01, 7.0000000e-01, 7.1000000e-01,
  148. 7.2000000e-01, 7.3000000e-01, 7.4000000e-01, 7.5000000e-01,
  149. 7.6000000e-01, 7.7000000e-01, 7.8000000e-01, 7.9000000e-01,
  150. 8.0000000e-01, 8.1000000e-01, 8.2000000e-01, 8.3000000e-01,
  151. 8.4000000e-01, 8.5000000e-01, 8.6000000e-01, 8.7000000e-01,
  152. 8.8000000e-01, 8.9000000e-01, 9.0000000e-01, 9.1000000e-01,
  153. 9.2000000e-01, 9.3000000e-01, 9.4000000e-01, 9.5000000e-01,
  154. 9.6000000e-01, 9.7000000e-01, 9.8000000e-01, 9.9000000e-01,
  155. 1.0000000e+00, 1.0100000e+00, 1.0200000e+00, 1.0300000e+00,
  156. 1.0400000e+00, 1.0500000e+00, 1.0600000e+00, 1.0700000e+00,
  157. 1.0800000e+00, 1.0900000e+00, 1.1000000e+00, 1.1100000e+00,
  158. 1.1200000e+00, 1.1300000e+00, 1.1400000e+00, 1.1500000e+00,
  159. 1.1600000e+00, 1.1700000e+00, 1.1800000e+00, 1.1900000e+00,
  160. 1.2000000e+00, 1.2100000e+00, 1.2200000e+00, 1.2300000e+00,
  161. 1.2400000e+00, 1.2500000e+00, 1.2600000e+00, 1.2700000e+00,
  162. 1.2800000e+00, 1.2900000e+00, 1.3000000e+00, 1.3100000e+00,
  163. 1.3200000e+00, 1.3300000e+00, 1.3400000e+00, 1.3500000e+00,
  164. 1.3600000e+00, 1.3700000e+00, 1.3800000e+00, 1.3900000e+00,
  165. 1.4000000e+00, 1.4100000e+00, 1.4200000e+00, 1.4300000e+00,
  166. 1.4400000e+00, 1.4500000e+00, 1.4600000e+00, 1.4700000e+00,
  167. 1.4800000e+00, 1.4900000e+00, 1.5000000e+00, 1.5100000e+00,
  168. 1.5200000e+00, 1.5300000e+00, 1.5400000e+00, 1.5500000e+00,
  169. 1.5600000e+00, 1.5700000e+00, 1.5800000e+00, 1.5900000e+00,
  170. 1.6000000e+00, 1.6100000e+00, 1.6200000e+00, 1.6300000e+00,
  171. 1.6400000e+00, 1.6500000e+00, 1.6600000e+00, 1.6700000e+00,
  172. 1.6800000e+00, 1.6900000e+00, 1.7000000e+00, 1.7100000e+00,
  173. 1.7200000e+00, 1.7300000e+00, 1.7400000e+00, 1.7500000e+00,
  174. 1.7600000e+00, 1.7700000e+00, 1.7800000e+00, 1.7900000e+00,
  175. 1.8000000e+00, 1.8100000e+00, 1.8200000e+00, 1.8300000e+00,
  176. 1.8400000e+00, 1.8500000e+00, 1.8600000e+00, 1.8700000e+00,
  177. 1.8800000e+00, 1.8900000e+00, 1.9000000e+00, 1.9100000e+00,
  178. 1.9200000e+00, 1.9300000e+00, 1.9400000e+00, 1.9500000e+00,
  179. 1.9600000e+00, 1.9700000e+00, 1.9800000e+00, 1.9900000e+00,
  180. 2.0000000e+00, 2.0100000e+00, 2.0200000e+00, 2.0300000e+00,
  181. 2.0400000e+00, 2.0500000e+00, 2.0600000e+00, 2.0700000e+00,
  182. 2.0800000e+00, 2.0900000e+00, 2.1000000e+00, 2.1100000e+00,
  183. 2.1200000e+00, 2.1300000e+00, 2.1400000e+00, 2.1500000e+00,
  184. 2.1600000e+00, 2.1700000e+00, 2.1800000e+00, 2.1900000e+00,
  185. 2.2000000e+00, 2.2100000e+00, 2.2200000e+00, 2.2300000e+00,
  186. 2.2400000e+00, 2.2500000e+00, 2.2600000e+00, 2.2700000e+00,
  187. 2.2800000e+00, 2.2900000e+00, 2.3000000e+00, 2.3100000e+00,
  188. 2.3200000e+00, 2.3300000e+00, 2.3400000e+00, 2.3500000e+00,
  189. 2.3600000e+00, 2.3700000e+00, 2.3800000e+00, 2.3900000e+00,
  190. 2.4000000e+00, 2.4100000e+00, 2.4200000e+00, 2.4300000e+00,
  191. 2.4400000e+00, 2.4500000e+00, 2.4600000e+00, 2.4700000e+00,
  192. 2.4800000e+00, 2.4900000e+00, 2.5000000e+00, 2.5100000e+00,
  193. 2.5200000e+00, 2.5300000e+00, 2.5400000e+00, 2.5500000e+00,
  194. 2.5600000e+00, 2.5700000e+00, 2.5800000e+00, 2.5900000e+00,
  195. 2.6000000e+00, 2.6100000e+00, 2.6200000e+00, 2.6300000e+00,
  196. 2.6400000e+00, 2.6500000e+00, 2.6600000e+00, 2.6700000e+00,
  197. 2.6800000e+00, 2.6900000e+00, 2.7000000e+00, 2.7100000e+00,
  198. 2.7200000e+00, 2.7300000e+00, 2.7400000e+00, 2.7500000e+00,
  199. 2.7600000e+00, 2.7700000e+00, 2.7800000e+00, 2.7900000e+00,
  200. 2.8000000e+00, 2.8100000e+00, 2.8200000e+00, 2.8300000e+00,
  201. 2.8400000e+00, 2.8500000e+00, 2.8600000e+00, 2.8700000e+00,
  202. 2.8800000e+00, 2.8900000e+00, 2.9000000e+00, 2.9100000e+00,
  203. 2.9200000e+00, 2.9300000e+00, 2.9400000e+00, 2.9500000e+00,
  204. 2.9600000e+00, 2.9700000e+00, 2.9800000e+00, 2.9900000e+00,
  205. 3.0000000e+00, 3.0100000e+00, 3.0200000e+00, 3.0300000e+00,
  206. 3.0400000e+00, 3.0500000e+00, 3.0600000e+00, 3.0700000e+00,
  207. 3.0800000e+00, 3.0900000e+00, 3.1000000e+00, 3.1100000e+00,
  208. 3.1200000e+00, 3.1300000e+00, 3.1400000e+00, 3.1500000e+00,
  209. 3.1600000e+00, 3.1700000e+00, 3.1800000e+00, 3.1900000e+00,
  210. 3.2000000e+00, 3.2100000e+00, 3.2200000e+00, 3.2300000e+00,
  211. 3.2400000e+00, 3.2500000e+00, 3.2600000e+00, 3.2700000e+00,
  212. 3.2800000e+00, 3.2900000e+00, 3.3000000e+00, 3.3100000e+00,
  213. 3.3200000e+00, 3.3300000e+00, 3.3400000e+00, 3.3500000e+00,
  214. 3.3600000e+00, 3.3700000e+00, 3.3800000e+00, 3.3900000e+00,
  215. 3.4000000e+00, 3.4100000e+00, 3.4200000e+00, 3.4300000e+00,
  216. 3.4400000e+00, 3.4500000e+00, 3.4600000e+00, 3.4700000e+00,
  217. 3.4800000e+00, 3.4900000e+00, 3.5000000e+00, 3.5100000e+00,
  218. 3.5200000e+00, 3.5300000e+00, 3.5400000e+00, 3.5500000e+00,
  219. 3.5600000e+00, 3.5700000e+00, 3.5800000e+00, 3.5900000e+00,
  220. 3.6000000e+00, 3.6100000e+00, 3.6200000e+00, 3.6300000e+00,
  221. 3.6400000e+00, 3.6500000e+00, 3.6600000e+00, 3.6700000e+00,
  222. 3.6800000e+00, 3.6900000e+00, 3.7000000e+00, 3.7100000e+00,
  223. 3.7200000e+00, 3.7300000e+00, 3.7400000e+00, 3.7500000e+00,
  224. 3.7600000e+00, 3.7700000e+00, 3.7800000e+00, 3.7900000e+00,
  225. 3.8000000e+00, 3.8100000e+00, 3.8200000e+00, 3.8300000e+00,
  226. 3.8400000e+00, 3.8500000e+00, 3.8600000e+00, 3.8700000e+00,
  227. 3.8800000e+00, 3.8900000e+00, 3.9000000e+00, 3.9100000e+00,
  228. 3.9200000e+00, 3.9300000e+00, 3.9400000e+00, 3.9500000e+00,
  229. 3.9600000e+00, 3.9700000e+00, 3.9800000e+00, 3.9900000e+00,
  230. 4.0000000e+00, 4.0100000e+00, 4.0200000e+00, 4.0300000e+00,
  231. 4.0400000e+00, 4.0500000e+00, 4.0600000e+00, 4.0700000e+00,
  232. 4.0800000e+00, 4.0900000e+00, 4.1000000e+00, 4.1100000e+00,
  233. 4.1200000e+00, 4.1300000e+00, 4.1400000e+00, 4.1500000e+00,
  234. 4.1600000e+00, 4.1700000e+00, 4.1800000e+00, 4.1900000e+00,
  235. 4.2000000e+00, 4.2100000e+00, 4.2200000e+00, 4.2300000e+00,
  236. 4.2400000e+00, 4.2500000e+00, 4.2600000e+00, 4.2700000e+00,
  237. 4.2800000e+00, 4.2900000e+00, 4.3000000e+00, 4.3100000e+00,
  238. 4.3200000e+00, 4.3300000e+00, 4.3400000e+00, 4.3500000e+00,
  239. 4.3600000e+00, 4.3700000e+00, 4.3800000e+00, 4.3900000e+00,
  240. 4.4000000e+00, 4.4100000e+00, 4.4200000e+00, 4.4300000e+00,
  241. 4.4400000e+00, 4.4500000e+00, 4.4600000e+00, 4.4700000e+00,
  242. 4.4800000e+00, 4.4900000e+00, 4.5000000e+00, 4.5100000e+00,
  243. 4.5200000e+00, 4.5300000e+00, 4.5400000e+00, 4.5500000e+00,
  244. 4.5600000e+00, 4.5700000e+00, 4.5800000e+00, 4.5900000e+00,
  245. 4.6000000e+00, 4.6100000e+00, 4.6200000e+00, 4.6300000e+00,
  246. 4.6400000e+00, 4.6500000e+00, 4.6600000e+00, 4.6700000e+00,
  247. 4.6800000e+00, 4.6900000e+00, 4.7000000e+00, 4.7100000e+00,
  248. 4.7200000e+00, 4.7300000e+00, 4.7400000e+00, 4.7500000e+00,
  249. 4.7600000e+00, 4.7700000e+00, 4.7800000e+00, 4.7900000e+00,
  250. 4.8000000e+00, 4.8100000e+00, 4.8200000e+00, 4.8300000e+00,
  251. 4.8400000e+00, 4.8500000e+00, 4.8600000e+00, 4.8700000e+00,
  252. 4.8800000e+00, 4.8900000e+00, 4.9000000e+00, 4.9100000e+00,
  253. 4.9200000e+00, 4.9300000e+00, 4.9400000e+00, 4.9500000e+00,
  254. 4.9600000e+00, 4.9700000e+00, 4.9800000e+00, 4.9900000e+00])
  255.  
  256. x,y = np.meshgrid(points,points)
  257. x
  258. # 结果
  259. array([[-5. , -4.99, -4.98, ..., 4.97, 4.98, 4.99],
  260. [-5. , -4.99, -4.98, ..., 4.97, 4.98, 4.99],
  261. [-5. , -4.99, -4.98, ..., 4.97, 4.98, 4.99],
  262. ...,
  263. [-5. , -4.99, -4.98, ..., 4.97, 4.98, 4.99],
  264. [-5. , -4.99, -4.98, ..., 4.97, 4.98, 4.99],
  265. [-5. , -4.99, -4.98, ..., 4.97, 4.98, 4.99]])
  266.  
  267. z = np.sqrt(x ** 2 + y ** 2)
  268. z
  269. # 结果
  270. array([[7.07106781, 7.06400028, 7.05693985, ..., 7.04988652, 7.05693985,
  271. 7.06400028],
  272. [7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815,
  273. 7.05692568],
  274. [7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354,
  275. 7.04985815],
  276. ...,
  277. [7.04988652, 7.04279774, 7.03571603, ..., 7.0286414 , 7.03571603,
  278. 7.04279774],
  279. [7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354,
  280. 7.04985815],
  281. [7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815,
  282. 7.05692568]])
  283.  
  284. import matplotlib.pyplot as plt
  285. plt.imshow(z,cmap=plt.cm.gray)
  286. plt.title("Image plot of $\sqrt{x^2 + y ^2}$")

将逻辑表达式转换为数组运算

  1. xarray = np.array([1.1,1.2,1.3,1.4,1.5])
  2. yarray = np.array([2.1,2.2,2.3,2.4,2.5])
  3. cond = np.array([True,False,True,True,False])
  4. # 根据cond的值来选xarray和yarray的值
  5. result = [(x if c else y) for x,y,c in zip(xarray,yarray,cond)]
  6. result
  7. # 结果
  8. [1.1, 2.2, 1.3, 1.4, 2.5]

np.where对上面的功能进行简写,但是上面的不能运用于多维数组

  1. np.where(cond,xarray,yarray)
  2. # 结果
  3. array([1.1, 2.2, 1.3, 1.4, 2.5])

np.where的第二个和第三个参数不必是数组,也可以是标量,分析工作中,where通常用于根据另一个数组而产生一个新的数组,,假设有一个随机数据组成的矩阵,你希望将所有的正值替换为2,所有的负值替换为-2,利用np.where很好解决

  1. data = np.random.randn(4,4)
  2. data
  3. # 结果
  4. array([[-0.17893171, -1.27250145, -0.45939414, 0.30944654],
  5. [ 0.35907625, -0.5218144 , 0.818055 , -0.41448322],
  6. [-0.93634932, 0.98570265, -0.01616765, -0.56027282],
  7. [-0.40607618, 1.39596637, 0.2368549 , 1.58591689]])
  8.  
  9. data > 0
  10. # 结果
  11. array([[False, False, False, True],
  12. [ True, False, True, False],
  13. [False, True, False, False],
  14. [False, True, True, True]])
  15.  
  16. np.where(data>0,2,-2) True就是2False就是-2
  17.  
  18. array([[-2, -2, -2, 2],
  19. [ 2, -2, 2, -2],
  20. [-2, 2, -2, -2],
  21. [-2, 2, 2, 2]])

将数组中所有正数全部换成2:这种方式确实省去了循环数组进行改值,效率很高

  1. np.where(data>0,2,data)
  2. # 结果
  3. array([[-0.17893171, -1.27250145, -0.45939414, 2. ],
  4. [ 2. , -0.5218144 , 2. , -0.41448322],
  5. [-0.93634932, 2. , -0.01616765, -0.56027282],
  6. [-0.40607618, 2. , 2. , 2. ]])

数学和统计方法

  sum mean std等聚合计算

例如:随机生成一些符合正态分布的数据,然后进行聚类统计

  1. data = np.random.randn(5,4)
  2. data
  3. # 结果
  4. array([[-0.06079722, 1.49824203, -0.80957561, 0.02303306],
  5. [-0.96135543, -0.99023163, -2.29943668, 0.02939615],
  6. [-0.85931239, 0.55478495, 0.0246531 , -1.35531409],
  7. [ 1.4930319 , -0.51001952, -0.47922101, 0.70338996],
  8. [-1.14822113, 1.38053279, -0.61358326, -0.38187168]])
  9.  
  10. data.mean()
  11. # 结果
  12. -0.23809378534483533
  13. np.mean(data)
  14. # 结果
  15. -0.23809378534483533
  16. data.sum()
  17. # 结果
  18. -4.761875706896706
  19. np.sum(data)
  20. # 结果
  21. -4.761875706896706
  22. data.mean(axis=0) # axis = 0 表示跨行---即每一列
  23. # 结果
  24. array([-0.30733085, 0.38666172, -0.83543269, -0.19627332])
  25. data.sum(axis=1) # axis = 1 表示跨列---即每一行
  26. # 结果
  27. array([ 0.65090226, -4.2216276 , -1.63518844, 1.20718134, -0.76314327])

  1.  

  不管是mean和sum计算,最终的结果都是少一维的数组

一维的样本累加

  1. data = np.array([1,2,3,4,5,6,7,8,9,10])
  2. data
  3. # array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
  4. data.cumsum() # 功能是将样本逐渐累加
  5. # 1 = 1;3 = 1 + 2;6 = 1 + 2 + 3;
  6. array([ 1, 3, 6, 10, 15, 21, 28, 36, 45, 55], dtype=int32)

多维的样本累加

  1. data = np.arange(1,10).reshape(3,3)
  2. data
  3. array([[1, 2, 3],
  4. [4, 5, 6],
  5. [7, 8, 9]])
  6.  
  7. data.cumsum()
  8. # 结果
  9. array([ 1, 3, 6, 10, 15, 21, 28, 36, 45], dtype=int32) # 全部累加
  10. data.cumsum(axis=0) # 每列累加
  11. # 结果
  12. array([[ 1, 2, 3],
  13. [ 5, 7, 9],
  14. [12, 15, 18]], dtype=int32)
  15. data.cumsum(axis=1) # 每行累加
  16. # 结果
  17. array([[ 1, 3, 6],
  18. [ 4, 9, 15],
  19. [ 7, 15, 24]], dtype=int32)

用于布尔型的数组方法

# TODO

数组排序

sort

一维数组排序

  1. data = np.random.randn(5)
  2. data
  3. # 结果
  4. array([-2.5325336 , -0.45898654, -0.35112763, -0.93824495, -0.6494557 ])
  5. data.sort()
  6. data
  7. # 结果
  8. array([-2.5325336 , -0.93824495, -0.6494557 , -0.45898654, -0.35112763])

2019-09-23-19:37:54

多维数组排序:sort

  1. data = np.random.randn(5,3)
  2. data
  3. array([[-1.09656539, -1.44675032, -0.49202197],
  4. [ 0.37282188, -0.24748695, 0.02384063],
  5. [ 0.46740851, 1.10011835, 0.47564148],
  6. [ 0.57882475, -2.20542035, 0.17290702],
  7. [ 0.55513993, -0.35427358, -2.03757406]])
  8. data.sort(0)
  9. data
  10. array([[-1.09656539, -2.20542035, -2.03757406],
  11. [ 0.37282188, -1.44675032, -0.49202197],
  12. [ 0.46740851, -0.35427358, 0.02384063],
  13. [ 0.55513993, -0.24748695, 0.17290702],
  14. [ 0.57882475, 1.10011835, 0.47564148]])
  15. np.sort(data,axis=0)
  16. data
  17. array([[-1.09656539, -2.20542035, -2.03757406],
  18. [ 0.37282188, -1.44675032, -0.49202197],
  19. [ 0.46740851, -0.35427358, 0.02384063],
  20. [ 0.55513993, -0.24748695, 0.17290702],
  21. [ 0.57882475, 1.10011835, 0.47564148]])

axis = 1排序结果:

  1. array([[ 0.16578703, 0.07492019, -0.97846794],
  2. [-0.18209471, -0.41217471, -0.60299124],
  3. [-1.72009426, -0.44879286, -1.6406782 ],
  4. [ 1.7511948 , -0.20265756, 0.82688453],
  5. [-0.47502325, -0.52784722, -1.52997592]])
  6.  
  7. np.sort(data,axis=1)
  8. array([[-0.97846794, 0.07492019, 0.16578703],
  9. [-0.60299124, -0.41217471, -0.18209471],
  10. [-1.72009426, -1.6406782 , -0.44879286],
  11. [-0.20265756, 0.82688453, 1.7511948 ],
  12. [-1.52997592, -0.52784722, -0.47502325]])

# 数组进行排序后就已经更改了数组的结构,数组变成了排序好的结构

一维数组的唯一值查找方法:也可理解为去重

  1. data = np.array([1,2,3,4,5,4,3,2,1,0])
  2. data
  3. array([1, 2, 3, 4, 5, 4, 3, 2, 1, 0])
  4. np.unique(data) # 去重后并返回排序好的数组
  5. array([0, 1, 2, 3, 4, 5])

成员是否在数组里面的判断方法

  1. data = np.array([1,2,3,4,5,4,3,2,1,0])
  2. data
  3. array([1, 2, 3, 4, 5, 4, 3, 2, 1, 0])
  4. ret = np.in1d(data,[3,4,5])
  5. ret # 返回一个bool值的列表
  6. array([False, False, False, False, False, True, True, True, True,
  7. True])

  1.  

数组文件的输入和输出

  numpy可以读取磁盘上的文本和二进制数据。np.save,np.load两个函数,默认下,数组是以未压缩的原始二进制格式保存在.npy的文件中。

  1. a = np.array([1,2,3])
  2. b = np.array([4,5,6])
  3. c = np.array([7,8,9])
  4.  
  5. np.savez("many",a=a,b=b,c=c) # 关键字参数传递参数
  6.  
  7. ret = np.load("many.npz")
  8. # ret类似一个字典形式
  9. ret
  10. <numpy.lib.npyio.NpzFile at 0x5dda080>
  11. ret['a']
  12. array([1, 2, 3])

线性代数

  numpy提供了dot函数,用来让两个矩阵进行乘法,

  1. x = np.array([[1,2,3],[4,5,6]])
  2. y = np.array([[7,8],[9,10],[11,12]])
  3.  
  4. # 2*3 3 *2 ---- 2 * 2
  5.  
  6. ret = np.dot(x,y)
  7. ret
  8.  
  9. array([[ 58, 64],
  10. [139, 154]])

二维矩阵 * 一维矩阵(大小合适)

  1. x = np.array([[1,2,3],[4,5,6]])
  2. y = np.array([7,8,9])
  3.  
  4. y
  5. y.shape # 一维数组只有行,没有列
  6. # 结果
  7. (3,) 3 * 1
  8.  
  9. ret = np.dot(x,y) 2*3 * 3*1 = 2*1
  10. ret
  11. # 结果
  12.  
  13. array([ 50, 122])

矩阵的转置,矩阵的逆

  1. data = np.random.randn(5,5)
  2. data
  3. array([[-0.66722861, -1.05166739, 0.50078389, 0.12101523, -1.79648742],
  4. [ 1.39744908, 0.52359195, -1.72793681, 0.85379089, 1.31061423],
  5. [-0.97876769, -0.45461206, 1.30106165, 1.24189733, 0.09226485],
  6. [-0.05682579, -0.86258199, 0.15000168, 0.13101571, -0.83373897],
  7. [-0.91637877, -0.7502237 , 0.19909396, 0.24339183, 1.89803093]])
  8. from numpy.linalg import inv,qr
  9. data_r = inv(data) # 矩阵的逆矩阵
  10. data_r
  11. array([[-1.76904786, -0.2303984 , 0.17920536, 2.35016865, -0.49167585],
  12. [ 0.4604562 , 0.06423869, 0.12409186, -1.50670415, -0.27641049],
  13. [-1.5185419 , -0.58246668, 0.4536423 , 1.57608382, -0.36483338],
  14. [ 0.40719248, 0.45835402, 0.51499641, -0.38190467, -0.12388313],
  15. [-0.56503165, -0.0835249 , 0.02194552, 0.42277667, 0.2343783 ]])
  16. np.dot(data,data_r)
  17. array([[ 1.00000000e+00, 6.43952042e-17, 6.35430438e-17,
  18. -2.23554197e-16, -8.50732362e-17],
  19. [ 4.93729662e-18, 1.00000000e+00, -5.08010725e-18,
  20. 3.01746183e-16, 1.16513398e-16],
  21. [-3.28852246e-16, 1.57394623e-16, 1.00000000e+00,
  22. 2.13695858e-17, -6.72574187e-17],
  23. [-3.73875165e-17, 2.04305881e-17, -1.55255260e-17,
  24. 1.00000000e+00, 8.39231877e-18],
  25. [-4.56471514e-17, 1.45263310e-16, -1.80718066e-18,
  26. -1.44115115e-16, 1.00000000e+00]])

伪随机数的生成

  标准正太分布的数据样本

# TODO

python数据分析第二版:numpy的更多相关文章

  1. python数据分析第二版:pandas

    一:pandas 两种数据结构:series和dataframe series:索引(索引自动生成)和标签(人为定义)组成---返回一个对象 obj = pd.Series([1,2,3,4]) ob ...

  2. python数据分析第二版:数据加载,存储和格式

    一:读取数据的函数 1.读取csv文件 import numpy as np import pandas as pd data = pd.read_csv("C:\\Users\\Admin ...

  3. 参考《利用Python进行数据分析(第二版)》高清中文PDF+高清英文PDF+源代码

    第2版针对Python 3.6进行全面修订和更新,涵盖新版的pandas.NumPy.IPython和Jupyter,并增加大量实际案例,可以帮助高效解决一系列数据分析问题. 第2版中的主要更新了Py ...

  4. 利用Python进行数据分析(第二版)电子版书籍分享

    资料下载地址: 链接:https://pan.baidu.com/s/1y1C0bJPkSn7Sv6Eq9G5_Ug 提取码:vscu <利用Python进行数据分析(第二版)>高清中文版 ...

  5. 小象学院Python数据分析第二期【升级版】

    点击了解更多Python课程>>> 小象学院Python数据分析第二期[升级版] 主讲老师: 梁斌 资深算法工程师 查尔斯特大学(Charles Sturt University)计 ...

  6. python数据分析三剑客之: Numpy

    数据分析三剑客之: Numpy 一丶Numpy的使用 ​ numpy 是Python语言的一个扩展程序库,支持大维度的数组和矩阵运算.也支持针对数组运算提供大量的数学函数库 创建ndarray # 1 ...

  7. python 数据分析工具之 numpy pandas matplotlib

    作为一个网络技术人员,机器学习是一种很有必要学习的技术,在这个数据爆炸的时代更是如此. python做数据分析,最常用以下几个库 numpy pandas matplotlib 一.Numpy库 为了 ...

  8. Python数据分析工具库-Numpy 数组支持库(一)

    1 Numpy数组 在Python中有类似数组功能的数据结构,比如list,但在数据量大时,list的运行速度便不尽如意,Numpy(Numerical Python)提供了真正的数组功能,以及对数据 ...

  9. Python数据分析工具库-Numpy 数组支持库(二)

    1 shape变化及转置 >>> a = np.floor(10*np.random.random((3,4))) >>> a array([[ 2., 8., 0 ...

随机推荐

  1. 数据库缓存之Memcache知识点

    Memcache知识点总结: 一.Memcache安装及使用 参考地址:https://www.jb51.net/article/66525.htm 1.将下载的Memcache安装文件放到某盘下,如 ...

  2. Git 创建版本库并实现本地上传数据到GitHub库

    版本库又叫做仓库,其实也是一个目录,这个目录里的所有文件都是被Git管理着,对每个文件的修改,删除,Git都会进行记录,方便我们对其进行跟踪. 因为本地是window环境,我们先从官网下载好windo ...

  3. centos6最小化安装默认没有 NetworkManager服务

    转载Centos6最小化安装中设置网卡默认启动   Centos 6.0版本提供了一个"最小化"(Minimal)安装的选项.这是一个非常好的改进,因为系统中再也不会存在那些不必要 ...

  4. dig中文帮助

    NAME(名称)     dig — 发送域名查询信息包到域名服务器 SYNOPSIS(总览)     dig [@server] domain [⟨query-type⟩] [⟨query-clas ...

  5. source ~/.bash_profile是什么意思

    ~ 这个符号表示你的家目录,.bash_profile 是一个隐藏文件,主要是用来配置bash shell的,source -/.bash_profile 就是让这个配置文件在修改后立即生效.

  6. SpringBoot整合jsp技术

    1.修改pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&qu ...

  7. 神器 工具 推荐 SRDebugger

    unity asset store 关联下载 ,添加这个书签  javascript:var url = window.location.href;var id = url.substr(url.la ...

  8. LDAP分布式数据库的介绍和安装使用

     目录服务 目录是一个为查询.浏览和搜索而优化的专业分布式数据库,它呈树状结构组织数据,就好象Linux/Unix系统中的文件目录一样.目录数据库和关系数据库不同,它有优异的读性能,但写性能差,并且没 ...

  9. linux中cut命令

    cut命令 cut常用参数 cut命令用来显示行中的指定部分,删除文件中指定字段. 说明:该命令有两项功能,其一是用来显示文件的内容,它依次读取由参数file所指明的文件,将它们的内容输出到标准输出上 ...

  10. [Python3 填坑] 011 元组中有多个最值,索引出来的是哪一个

    目录 1. print( 坑的信息 ) 2. 开始填坑 (1) max() (2) min() (3) 结论 1. print( 坑的信息 ) 挖坑时间:2019/01/11 明细 坑的编码 内容 P ...