zoukankan      html  css  js  c++  java
  • Numpy入门

    数组计算:不同维度的数组可以直接运算(数组的维度拓展属性-broadcasting),如常数和1维数组运算,1维数组和3×3数组运算,数组(1×3)和数组(3×1)运算,都是将自己扩展后进行。
    维度拓展的规则:1.在低维数组左边加一,然后按这个第一维度方向拓展去匹配另一高维数组。(若此后仍不匹配则错误)

    1 np.newaxis  #增加一个维度。如果是一维行数组(1×3),就变成二维列数组(3×1).
    2 x[:,np.newaxis] #在列上增加维度,比如(5,)→(5,1).
    3 x[np.newaxis,:] #在行上增加维度,比如(5,)→(1,5).
    4 x.mean(0) #axis=0,沿第一个方向聚合操作,行的方向。可用来求某个特征的各种统计值。


    eg.

     1 x=np.random.random((10,3))
     2 x.mean(0) # axis=0,第一个维度(行)聚合操作。
     3 x_centered=x-x.mean(0) #归一化 ,每个特征减去该特征的均值,用到了broadcasting
     4 x_centered.mean(0) #归一化后的特征均值为0(即特征所有元素之和为0)
     5 
     6 #x,y分别表示(0,5)区间内50个步长的数组
     7 x = np.linspace(0, 5, 50) #一维
     8 y = np.linspace(0, 5, 50)[:, np.newaxis] #2维
     9 z = np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x) #得到一个二维数组
    10 import matplotlib.pyplot as plt
    11 plt.imshow(z, origin=‘lower’, extent=[0, 5, 0, 5], cmap=‘viridis’)
    12 plt.colorbar()    #实质是二元函数的可视化

    聚合计算
    掩码:对数组进行简单索引,利用一些条件
    eg:
    x**[x<5]**:括号内相当于掩码操作[x<5]返回布尔数组。x[x<5]最后返回的值是掩码数组(布尔操作后的逻辑数组)对应位置为True的值。

    关于数组逻辑运算
    通过将布尔操作、 掩码操作和聚合结合, 可以解决数据集各种统计特征。使用关键字 and/or 与使用逻辑操作运算符 &/|
    python中使用关键字 and/or 与使用逻辑操作运算符 &/|区别是:and 和 or 判断整个对象是真或假, 而 & 和 | 是指
    每个对象中的比特位。(操作的是每个元素的比特)
    两个数组对应位置去比较时可以用|,eg:

    1 A = np.array([1, 0, 1, 0, 1, 0], dtype=bool)
    2 B = np.array([1, 1, 1, 0, 1, 1], dtype=bool)
    3 A | B
    4 
    5 #out:
    6 array([ True, True, True, False, True, True])
    7 #但是用or,如A or B会报错。


    对给定数组进行逻辑运算时, 你也应该使用 | 或 &, 而不是or 或 and。
    and 和 or 对整个对象执行单个布尔运算, 而 & 和| 对一个对象的内容(单个比特或字节) 执行多个布尔运算。 对于NumPy 布尔数组, 首选 & 和|

    数组标准索引:x[a,b] # a代表行,b代表列。
    索引的broadcasting

     1 x=array([[ 0, 1, 2, 3],[ 4, 5, 6, 7],[ 8, 9, 10, 11]])
     2 
     3 x[[0,1,2],[2,1,3]]
     4 
     5 #output:
     6 array([2,5,11])
    7 x[[0,1,2],[2,1,3]] 8 #索引数组是(3,1)*(1,3),因此根据broadcasting特性输出数组为(3,3)。 9 10 #output: 11 array([[ 2, 1, 3],[ 6, 5, 7],[10, 9, 11]])

    组合索引:
    与简单索引组合: x[2, [0,2,1]]:#第三行的第1,3,2元素。
    与切片组合: X[1:, [2, 0, 1]]。

    组合索引的用途示例:(从一点矩阵中选择行的子集)
    选择随机点

    1 mean = [0, 0]
    2 cov = [[1, 2],
    3 [2, 5]]
    4 X = np.random.multivariate_normal(mean, cov, 100) #利用给定均值和方差生成数据。
    5 X.shape
    6 import matplotlib.pyplot as plt
    7 import seaborn; seaborn.set() # 设置绘图风格
    8 plt.scatter(X[:, 0], X[:, 1])#散点图

    用索引修改值:

     1 x = np.arange(10)
     2 i = np.array([2, 1, 8, 4])
     3 x[i] = 99
     4 print(x)
     5 
     6 #output:
     7  [ 0 99 99 3 99 5 6 7 99 9]
     8 
     9 x[i] -= 10
    10 print(x)
    11 
    12 #output:
    13 [ 0 89 89 3 89 5 6 7 89 9]

    数据区间划分:

    1 np.random.seed(42)
    2 x = np.random.randn(100)
    3 bins = np.linspace(-5, 5, 20) #设置坐标范围
    4 plt.hist(x, bins, histtype=‘step’)#设置直方图的风格

    一个对大数据集非常有效的算法并不总是小数据集的最佳选择, 反之同理。

  • 相关阅读:
    【整理】Web页面防止重复提交
    C#域验证的代码
    【整理】delegate+RemotingServices 委托+远程调用的一个实例
    【转载】框架里跨域Session丢失问题
    转贴:谈谈多线程的思维方式
    list,vector,deque有什么区别
    转贴:.NET多线程编程(3):线程同步
    转贴:.NET多线程编程(1):多任务和多线程
    转贴:.NET多线程编程(2):System.Threading.Thread类
    转贴:.NET多线程编程(4):线程池和异步编程
  • 原文地址:https://www.cnblogs.com/Henry-ZHAO/p/12725353.html
Copyright © 2011-2022 走看看