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)) # 返回最大值的索引

     
  • 相关阅读:
    Apache Solr学习 第二篇 solr安装(windows)
    Apache Solr学习 第一篇 简介和安装环境准备
    第二篇 redis常用操作命令
    第一篇 redis简介及安装
    使用maven安装jar包到本地仓库时遇到The goal you specified requires a project to execute but there is no POM in this directory错误
    使用Arrays.asList()时遇到的问题
    linux下zookeeper的安装
    第六篇 mybatis的运行原理(3):工厂方法模式,SqlSession的创建
    leetcode 剑指 Offer 35. 复杂链表的复制
    leetcode 112. 路径总和
  • 原文地址:https://www.cnblogs.com/ying-chease/p/8485423.html
Copyright © 2011-2022 走看看