zoukankan      html  css  js  c++  java
  • python numpy笔记(重要)

    1、np.array 的shape (2,)与(2,1)含义

    ndarray.shape:数组的维度。为一个表示数组在每个维度上大小的整数元组。例如二维数组中,表示数组的“行数”和“列数”。

    ndarray.shape返回一个元组(tuple),这个元组的长度就是维度的数目,即ndim属性。

    data = [[1, 2, 3], [4, 5, 6]]
    x = numpy.array(data)
    
    print(x.shape) 
    >> (2, 3) # x.shape是一个tuple
    
    x2 = x.reshape(x.shape + (1,)) #加一个维度
    print(x2.shape)
    >> (2, 3, 1)

    #tuple相加
    t1 = (1,2)
    t2 = (3,4)
    print(t1+t2)
    >> (1,2,3,4)

    一般情况下:
    [1,2]的shape值(2,),意思是一维数组,数组中有2个元素(一级中括号,维度1)。

    [[1],[2]]的shape值是(2,1),意思是一个二维数组,每行有1个元素(两级中括号,维度2)。

    [[1,2]]的shape值是(1, 2),意思是一个二维数组,每行有2个元素(两级中括号,维度2)。

    中括号的层级数就是ndarray的维度,也是shape元组的元素个数。

    2、numpy 提取矩阵的某一行或某一列

    a([[0, 1, 2],
           [3, 4, 5],
           [6, 7, 8]])

    矩阵的某一行,a[0]即 [0, 1, 2] ,类型为narry,shape为(3,)

    矩阵的某一列,a[:, 0]即 [1, 3, 6],类型为narry,shape为(3,)

    3、特殊矩阵生成

    3.1) arange  用法 :np.arange(0,10)  // 生成[0,1,2,3,4,5,6,7,8,9] 左开右闭不包括10

    3.2) reshape 用法 np.arange(1,10).reshape((3,3))  从(3,4)改为(4,3)并不是对数组进行转置,而只是改变每个轴的大小,数组元素在内存中的位置并没有改变。新数组元素数量与原数组元素数量要相等。当一个参数为-1时,那么reshape函数会根据另一个参数的维度计算出数组的这个shape属性值。

    3.3)随机数组生成   np.random.randint(0, 10, size=(3, 3))  随机生成(3*3)元素在0-10的数的二维数组

    https://blog.csdn.net/lyb3b3b/article/details/74852737

    3.4) np.array切片

    3.5) 特殊矩阵的生成  np.ones((3,3))、np.zeros((3,3))、np.eye(1,1) [单位矩阵]; 还有 a=[1,2,3] np.diag(a) 是生成1,2,3 为对角线的方阵。

    3.6)生成某一值的数组: np.full((3, 3), 7, dtype=np.float32)

    4、数组和矩阵运算  np.multiply()、np.dot()和星号(*)

    4.1) np.multiply()函数,点乘函数,为了矩阵能像数组那样对应位置相乘,给矩阵用的,数组也可以用,输出与相乘数组/矩阵的大小一致,对数组对矩阵都是如此.

    A = np.arange(1,5).reshape(2,2)
    array([[1, 2],
           [3, 4]])
    
    B = np.arange(0,4).reshape(2,2)
    array([[0, 1],
           [2, 3]])
    
    np.multiply(A,B)       #数组对应元素位置相乘
    array([[ 0,  2],
           [ 6, 12]])

    矩阵场景:

    np.multiply(np.mat(A),np.mat(B))     #矩阵对应元素位置相乘,利用np.mat()将数组转换为矩阵
    
    matrix([[ 0,  2],
            [ 6, 12]])
    
    np.sum(np.multiply(np.mat(A),np.mat(B)))    #输出为标量
    20

    4.2)dot,为了数组能像矩阵那样相乘,给数组用的,矩阵也可以用;矩阵乘法。dot就是用来做矩阵乘法的,将数组当作矩阵相乘,数组A的列数=数组B的行数。

    4.3) * 该怎么乘就怎么乘

    数组就表示数组乘法:数组X数组,直觉:对应位置相乘

    矩阵就表示,矩阵乘法,矩阵a的行X矩阵b的列,a的列数!=b的行数,就报错

    https://blog.csdn.net/shuiyuejihua/article/details/80148607

    5 ndarray取最值及索引

    #最值
    np.max(a) #全局最大
    np.max(a,axis=0) #每列最大
    np.max(a,axis=1) #每行最大

    #最值索引
    np.argmin(a, axis=0) # 按每列求出最小值的索引
    np.argmin(a, axis=1)  # 按每行求出最小值的索引

    #python list
    list_a_max_list = max(list_a) #返回最大值
    max_index = list_a.index(max(list_a)) # 返回最大值的索引

     
  • 相关阅读:
    2019.6.20刷题统计
    36 线程 队列 守护线程 互斥锁 死锁 可重入锁 信号量
    35 守护进程 互斥锁 IPC 共享内存 的方式 生产者消费者模型
    34 进程 pid ppid 并发与并行,阻塞与非阻塞 join函数 process对象 孤儿进程与僵尸进程
    33 udp 域名 进程
    32 粘包 文件传输
    31 socket客户端. 服务器 异常 语法
    30 网络编程
    29 元类 异常
    26 封装 反射 常用内置函数
  • 原文地址:https://www.cnblogs.com/ying-chease/p/8485423.html
Copyright © 2011-2022 走看看