精华内容
下载资源
问答
  • 1. 问题ndarray 是 NumPy 的基础元素,NumPy 又主要是用来进行矩阵运算的。那么具体来说,ndarray 是如何进行普通矩阵运算的呢?2. 分析首先,在矩阵用 +-*/ 这些常规操作符操作的时候,是对元素进行操作。这和其他...

    b180f10b69bc55271590bc4128d2816f.png

    61ae4026984dea5f85688a6031c65182.png

    1. 问题

    ndarray 是 NumPy 的基础元素,NumPy 又主要是用来进行矩阵运算的。那么具体来说,ndarray 是如何进行普通矩阵运算的呢?

    2. 分析

    首先,在矩阵用 +-*/ 这些常规操作符操作的时候,是对元素进行操作。这和其他诸如 MATLAB 等语言不一样。

    比如

    ar = np.array([[20, 21, 22],
           [23, 24, 25]])
    ar * ar
    

    结果输出

    array([[400, 441, 484],
           [529, 576, 625]])

    可见, * 并没有进行矩阵乘法,而是矩阵和矩阵的元素进行了相乘。想要进行矩阵乘法计算,需要用dot方法

    ar3 = np.array([[1, 2, 3],
           [4, 5, 6],
           [3, 2, 1]])
    ar3.dot(ar3)
    

    结果输出

    array([[18, 18, 18],
           [42, 45, 48],
           [14, 18, 22]])
    ar3 * ar3
    

    结果输出

    array([[ 1,  4,  9],
           [16, 25, 36],
           [ 9,  4,  1]])

    那不同维数的矩阵如何处理?比如一个二维矩阵和一维向量,如何操作?这就需要用到 NumPy 的 Broadcasting 功能。Broadcasting 可以把低维矩阵扩展成高维矩阵进行运算。比如最简单的矩阵和数字相加,其实就等于把数字扩展成了一个和矩阵等大的新矩阵,然后对应元素相加。

    Broadcasting 规则很简单

    In order to broadcast, the size of the trailing axes for both arrays in an operation must either be the same size or one of them must be one. Array Broadcasting in Numpy — NumPy v1.19.dev0 Manual

    即,Broadcasting 的时候,需要两个矩阵的尾轴大小相等,或者其中一个是 1。

    这么说有点枯燥,举例如下

    ar = np.array([[20, 21, 22],
           [23, 24, 25]])
    t = array([1, 2, 3])
    h = array([1, 2])
    
    ar / t
    

    结果输出

    array([[30.        , 15.5       , 10.66666667],
           [33.        , 17.        , 11.66666667]])
    
    ar / h
    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    <ipython-input-21-711a92d431f2> in <module>
    ----> 1 ar / h
    
    ValueError: operands could not be broadcast together with shapes (2,3) (2,)

    t 和 h 都是只有一个维度,所以其大小就等于尾维。t 的尾轴大小为3,ar 是 2x3,尾轴也是3,两者相等,可以计算。h 的尾轴大小为2,两者不等,所以出现错误。

    其 Broadcasting 可以理解为

    axis 1 fix
                             +------------>
    ar [20, 21, 22]   /      | t [1, 2, 3]
       [23, 24, 25]     axis |   [1, 2, 3]
                        0    |
                             v broadcast by axis 0

    可见,把 t 扩展成和 ar 一样大小后,两者在元素级别上对应相除,即可得到之前的结果。

    3. 扩展

    刚才提到了 NumPy 的轴,可以进一步扩展一下。轴在 NumPy里面通常用参数axis传递,比如 axis=0

    NumPy 的坐标轴可以用下图来表示

    axis 1
            +--------------->
            |       0     1     2
            |     +----+-----+----+
    axis 0  |  0  |0,0 | 0,1 | 0,2|
            |     +---------------+
            |  1  |1,0 | 1,1 | 1,2|
            |     +---------------+
            v  2  |2,0 | 2,1 | 2,2|
                  +----+-----+----+

    当我们指定某一参数的时候,就可以理解成沿着这个方向执行操作。比如

    Input: ar = np.arange(6).reshape(2,3)
    Output:    array([[0, 1, 2],
                      [3, 4, 5]])
    
    Input: np.sum(ar, axis=0)
    Output:    array([3, 5, 7])
    
    Input: np.sum(ar, axis=1)
    Output:    array([ 3, 12])

    可见,当指定 axis=0 时,求和会沿着0轴方向进行,最后形成一个三个数字的向量;当指定 axis=1 时,求和会沿着1轴方向进行,最后形成一个两个数字的向量。

    4. 总结

    今天我们大致总结了 NumPy 的运算规则及坐标轴的含义。NumPy 作为基本库,是诸如 pandas、scikit-learn 等库的基础,掌握 NumPy 的相关规则,应是基本功。

    相关代码均已上传到 Data2Science@Github (https://github.com/jetorz/Data2Science),欢迎标记 Star。

    5. 交流

    独学而无友则孤陋寡闻。现有「数据与统计科学」微信交流群,内有数据行业资深从业人员、海外博士、硕士等,欢迎对数据科学、数据分析、机器学习、人工智能有兴趣的朋友加入,一起学习讨论。

    大家可以扫描下面二维码,添加荔姐微信邀请加入,暗号:机器学习加群。

    41f473189c750efee56ef08b10f2321a.png

    6. 扩展

    6.1. 延伸阅读

    1. Numpy 中如何对矩阵的特征对排序
    2. Python 中怎样合并数据

    6.2. 参考文献

    1. [1]M. Wes, Python for Data Analysis, 2nd. Beijing: O’Reilly, 2017.
    2. [1]J. VanderPlas, Python Data Science Handbook. Beijing: O’Reilly, 2016.

    7203457db0350f1b721484bb7f451576.png
    展开全文
  • 具体解释外积也即是:张量积在线性代数一般指两个向量的张量积,其结果为一矩阵,也就是矩阵乘法具体解释叉积也即是:向量积叉积axb得到的是与a和b都垂直的向量具体解释Numpy中矩阵乘法np.dot()对...

    数学上的内积、外积和叉积

    内积

    也即是:点积、标量积或者数量积

    从代数角度看,先对两个数字序列中的每组对应元素求积,再对所有积求和,结果即为点积。从几何角度看,点积则是两个向量的长度与它们夹角余弦的积。

    具体解释

    外积

    也即是:张量积

    在线性代数中一般指两个向量的张量积,其结果为一矩阵,也就是矩阵乘法

    具体解释

    叉积

    也即是:向量积

    叉积axb得到的是与a和b都垂直的向量

    具体解释

    Numpy中的矩阵乘法

    np.dot()

    对于二维矩阵,计算真正意义上的矩阵乘积;对于一维矩阵,计算两者的内积。(结合了数学意义上的内积和外积)

    # 2-D array

    import numpy

    a = numpy.array([[1,2],

    [3,4]])

    b = numpy.array([[5,6],

    [7,8]])

    a.dot(b)

    >>>array([[19, 22],

    [43, 50]])

    numpy.dot(a,b)

    >>>array([[19, 22],

    [43, 50]])

    # 1-D array

    import numpy

    a = numpy.array([1, 2, 3])

    b = numpy.array([4, 5, 6])

    numpy.dot(a,b)

    >>>32

    对应元素相乘

    在Python中,实现对应元素相乘,有2种方式,一个是np.multiply(),另外一个是*。

    import numpy

    a = numpy.array([[1,2],

    [3,4]])

    b = numpy.array([[5,6],

    [7,8]])

    a*b

    >>>array([[ 5, 12],

    [21, 32]])

    numpy.multiply(a,b)

    >>>array([[ 5, 12],

    [21, 32]])

    展开全文
  • Python Numpy矩阵乘法

    千次阅读 2020-09-15 18:41:23
    In this tutorial we will see python matrix multiplication using numpy ... 在本教程,我们将看到使用numpy(Numerical Python)库的python矩阵乘法 。 For using numpy you must install it first on your...

    In this tutorial we will see python matrix multiplication using numpy (Numerical Python) library.

    在本教程中,我们将看到使用numpy(Numerical Python)库的python矩阵乘法

    For using numpy you must install it first on your computer, you can use package manager like pip for installing numpy.

    要使用numpy,必须先将其安装在计算机上,然后可以使用软件包管理器(如pip)安装numpy。

    Numpy provide array data structure which is almost the same as python list but have faster access for reading and writing resulting in better performance. We will use numpy arrays to represent matrices.

    Numpy提供的数组数据结构与python列表几乎相同,但具有更快的读写访问权限,从而提高了性能。 我们将使用numpy数组来表示矩阵。

    To perform matrix multiplication of matrices a and b , the number of columns in a must be equal to the number of rows in b otherwise we cannot perform matrix multiplication.

    为了执行矩阵AB的矩阵乘法, 列数必须等于b中的行否则就不能执行矩阵乘法的数量。

    We must check this condition otherwise we will face runtime error.

    我们必须检查这种情况,否则我们将面临运行时错误。

    There is * operator for numpy arrays but that operator will not do matrix multiplication instead it will multiply the matrices element by element.

    numpy数组有*运算符,但该运算符不会进行矩阵乘法,而是将矩阵元素逐元素相乘。

    Here is an example with * operator:

    这是带有*运算符的示例:

    # Import numpy 
    import numpy as np
     
    def printMatrix(a):
        
        # Printing matrix
        for i in range(0,len(a)):
            for j in range(0,len(a[0])):
                print(a[i][j],end = " ")
            print()
     
    def main():
        
        # Declaring our matrices using arrays in numpy
        a = np.array([[1,2,3],[3,4,5],[5,6,7]])
        b = np.array([[1,2,3]])
        
        print("Matrix a :")
        printMatrix(a)
        print()
        
        print("Matrix b : ")
        printMatrix(b)
        print()
        
        # Using * operator to multiply
        c = a*b
        
        # Printing Result
        print("Result of a*b : ")
        printMatrix(c)
     
    main()

    Output:

    输出:

    Matrix a : 1 2 3 3 4 5 5 6 7

    矩阵a: 1 2 3 3 4 5 5 6 7

    Matrix b : 1 2 3

    矩阵b: 1 2 3

    Result of a*b : 1 4 9 3 8 15 5 12 21

    a * b的结果: 1 4 9 3 8 15 5 12 21

    Python Numpy矩阵乘法 (Python Numpy Matrix Multiplication)

    We can see in above program the matrices are multiplied element by element. So for doing a matrix multiplication we will be using the dot function in numpy.

    我们可以在上面的程序中看到矩阵乘以一个元素。 因此,为了进行矩阵乘法,我们将在numpy中使用点函数。

    We can either write

    我们可以写

    • np.dot(a,b)

      np.dot(a,b)
    • a.dot(b)

      点(b)

    for matrix multiplication here is the code:

    对于矩阵乘法,下面是代码:

    # Import numpy 
    import numpy as np
     
    def printMatrix(a):
        
        # Printing matrix
        for i in range(0,len(a)):
            for j in range(0,len(a[0])):
                print(a[i][j],end = " ")
            print()
        
        
     
    def main():
        
        # Taking rows and columns of a 
        m = int(input("Enter rows in a : "))
        n = int(input("Enter columns in a : "))
        
        # Taking rows and columns of b
        p = int(input("Enter rows in b : "))
        q = int(input("Enter columns in b : "))
        
        # Checking necessary condition for matrix multiplication
        if n!= p:
            print("Number of columns in b must be equal to rows in b")
            exit()
        
        # Initializing a and b list
        a = [ [0 for i in range(0,n)] for j in range(0,m) ]
        b = [ [0 for i in range(0,q)] for j in range(0,p) ]
        
        # Taking input list a
        print("Enter matrix a : ")
        for i in range(0,m):
            for j in range(0,n):
                a[i][j] = int(input("Enter element a[" + str(i) + "][" + str(j) + "] : "))
        
        # Taking input list b
        print("Enter matrix b : ")
        for i in range(0,p):
            for j in range(0,q):
                b[i][j] = int(input("Enter element b[" + str(i) + "][" + str(j) + "] : "))
        
        
        # Converting python list in numpy array
        a = np.array(a)
        b = np.array(b)
        
        print("Matrix a :")
        printMatrix(a)
        print()
        
        print("Matrix b : ")
        printMatrix(b)
        print()
        
        # Using dot operator to multiply
        c = a.dot(b)
        
        # Printing Result
        print("Result of a*b : ")
        printMatrix(c)
     
     
    main()

    Output:

    输出:

    Enter rows in a : 2 Enter columns in a : 3 Enter rows in b : 3 Enter columns in b : 2 Enter matrix a : Enter element a[0][0] : 2 Enter element a[0][1] : 3 Enter element a[0][2] : 4 Enter element a[1][0] : 1 Enter element a[1][1] : 2 Enter element a[1][2] : 3 Enter matrix b : Enter element b[0][0] : 4 Enter element b[0][1] : 5 Enter element b[1][0] : 1 Enter element b[1][1] : 6 Enter element b[2][0] : 9 Enter element b[2][1] : 7 Matrix a : 2 3 4 1 2 3

    输入a中的行:2 输入a中的列:3 输入b中的行:3 输入b中的列:2 输入矩阵a: 输入元素a [0] [0]:2 输入元素a [0] [1]:3 输入元素a [0] [2]:4 输入元素a [1] [0]:1 输入元素a [1] [1]:2 输入元素a [1] [2]:3 输入矩阵b: 输入元素b [0] [0]:4 输入元素b [0] [1]:5 输入元素b [1] [0]:1 输入元素b [1] [1]:6 输入元素b [2] [0 ]:9 输入元素b [2] [1]:7 矩阵a: 2 3 4 1 2 3

    Matrix b : 4 5 1 6 9 7

    矩阵b: 4 5 1 6 9 7

    Result of a*b : 47 56 33 38

    a * b的结果: 47 56 33 38

    Here the output is different because of the dot operator. Alternatively we can use the numpy matrices method to first convert the arrays into matrices and then use * operator to do matrix multiplication as below:

    由于点运算符,此处的输出是不同的。 或者,我们可以使用numpy矩阵方法首先将数组转换为矩阵,然后使用*运算符进行矩阵乘法,如下所示:

    # Using * operator to multiply
    c = np.matrix(a)*np.matrix(b)

    Comment below if you have any queries related to python numpy matrix multiplication.

    如果您有任何有关python numpy矩阵乘法的查询,请在下面评论。

    翻译自: https://www.thecrazyprogrammer.com/2019/08/python-numpy-matrix-multiplication.html

    展开全文
  • 1)元素对应相乘,使用 multiply 函数或 * 运算符来实现 a = np.array([2,2,2])b = np.array([3,3,3]) c1 = a*a c1array([4, 4, 4]) ...2)矩阵相乘,使用 dot函数或 @运算符来实现 a = np.array(...

    1)元素对应相乘,使用 multiply 函数或 * 运算符来实现

    a = np.array([2,2,2])
    b = np.array([3,3,3])
    c1 = a*a 
    c1

    array([4, 4, 4])
    c2 = np.multiply(a,b)
    c2
    
    array([6, 6, 6])

    2)矩阵相乘,使用 dot函数或 @运算符来实现

    a = np.array([[2,2,2],[1,1,1]])    #a.shape(2, 3)
    c = np.array([[3,4],[1,0],[1,1]])  #c.shape(3, 2)
    b2 = a@c 
    b2  
    
    array([[10, 10],[ 5, 5]])          #b2.shape(2, 2)

    如果两个一维数组相乘:

    a = np.array([2,2,2])
    c = np.array([3,4,5])
    b1 = np.dot(a,c)       #a@c
    b1
    
    24
    
    b2 = a@c
    b2
    
    24
     

     

    转载于:https://www.cnblogs.com/tongtong123/p/10642817.html

    展开全文
  • <Python> Numpy中矩阵乘法问题

    万次阅读 多人点赞 2017-07-27 22:48:54
    最近参加的一个Program,主题是生物识别,其中的PCA/LDA特征值提取部分需要大量用到线性...Numpy中矩阵乘法分为两大情况,使用numpy.array和使用numpy.matrix. Numpy确实重载了*操作符,可以直接对array或者matrix对
  • 使用array时,运算符multiply、 *...对于秩不为1的二维数组,执行矩阵乘法运算;)使用matrix时,运算符 * 、 dot() 用于(2),函数 multiply() 用于(1).1. 同线性代数矩阵乘法的定义: np.dot()np.dot(A, B)...
  • 本节简要总结Python数组、列表、元组、Numpy数组、Numpy矩阵的概念与联系。 1. 数组 Python没有数组!!! 2. 列表 python内置类型,即动态数组,C++标准库的vector,但含不同类型的元素于一个list。 下标...
  • 最近看到一篇文章,它以可视化的形式呈现了 NumPy中矩阵操作的一些原理,推荐给大家一看。“阅读本文大概需要 9 分钟。”本文用可视化的方式介绍了 NumPy 的功能和使用示例。 NumPy 软件包是 Python 生态系统数据...
  • Python扩展库numpy.linalg的eig()函数可以用来计算矩阵的特征值与特征向量,而numpy.linalg.inv()函数用来计算可逆矩阵的逆矩阵。>>> importnumpy as np>>> x = np.matrix([[1,2,3], [4,5,6], [7,...
  • 浅析机器学习Numpy库基础——向量、矩阵和数组
  • NumPy 提供了两个基本的对象...NumPy 矩阵对象为 matrix,它包含有矩阵的数据处理、矩阵计算、转置、可逆性等功能。matrix 是 ndarray 的子类,矩阵对象是继承自 NumPy 数组对象的二维数组对象,因此,矩阵会含...
  • 这种工具用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。据说NumPy将Python相当于变成一种免费的更强大的MatLab系统。其重要功能如下...
  • 知识内容:1.运算符与表达式2.for\while初步了解3.常用内置函数一、运算符与表达式python与其他语言一样支持大多数算数运算符、关系...比较运算符a=10, b=20注: 在python3不存在,只在python2存在3.赋值运算符...
  • 举例讲解Python的算数运算符的用法下表列出了所有Python语言支持的算术运算符。假设变量a持有10和变量b持有20,则:例子:试试下面的例子就明白了所有的Python编程语言提供了算术运算符:#!/usr/bin/pythona = 21b ...
  • NumPy库是Python库用于数据分析,机器学习,科学计算的一个主力,它极大地简化了向量和矩阵的操作和处理。Python的一些主要软件包依赖于NumPy作为其架构的基础部分,比如scikit-learn, SciPy, pandas以及 ...
  • Numpy使用说明

    千次阅读 2020-12-15 00:52:13
    导入numpyimport numpy as npNumpy最重要的一个特点就是它可以快速地创建一个N维数组对象,即numpy.ndarray。(本专栏ndarray对象和数组并不做概念上的区分)。然后你可以利用ndarray这种数据结构非常高效地执行一些...
  • Numpy基础+进阶+高级

    千次阅读 2018-06-01 13:59:32
    一、ndarray概念 1、回顾python基本类型 数字类型: 整型: 布尔型bool、整型int、长整形long 非整型:浮点float 、复数complex 容器: 序列:字符串str 、列表... 集合:变集合set、不变集合frozen set ...
  • NumPy 是数据分析的三大剑客之一,主要用于数组计算、矩阵运算和科学计算。对于刚开始学习数据分析的读者,建议灵活选择,重点掌握数组创建、数组的简单操作和计算即可。(不要死磕、钻牛角尖,先上手会使用,后续再...
  • NumPy 软件包是 Python 生态系统数据分析、机器学习和科学计算的主力军。它极大地简化了向量和矩阵的操作处理。Python 的一些主要软件包(如 scikit-learn、SciPy、pandas 和 tensorflow)都以 NumPy 作为其架构的...
  • Eigen库的使用零、前言一、Eigen矩阵类1、矩阵类模板参数2、向量3、特值...矩阵向量乘法5、点积和叉积6、基本算术归约运算7、操作的有效性三、数组类和按系数运算1、数组类2、访问数组内的值3、加减4、数组乘法5、其他...
  • Python之Numpy详细教程

    万次阅读 多人点赞 2018-03-16 13:59:14
    NumPy - 简介 NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。 Numeric,即 NumPy 的前身,是由 Jim Hugunin 开发的。 也开发了另一个包 ...
  • NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。如果你使用 Python 语言进行科学计算,那么一定会接触到 NumPyNumPy 的英文...
  • python之numpy

    2019-11-07 17:36:16
    Numpy是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。 2.创建数组以及数组的dtype属性 import numpy as np # 通过numpy创建数组,数组数据类型是numpy....
  • 来源丨大数据文摘原文链接丨https://jalammar.github.io/visual-numpy/正文NumPy是Python中用于数据分析、机器学习、科学计算的重要软件包。它极大...
  • TutorialsPoint NumPy 教程

    万次阅读 2016-12-29 23:01:43
    来源:NumPy Tutorial - TutorialsPoint 译者:飞龙 协议:CC BY-NC-SA 4.0 NumPy - 简介NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。...
  • 如何使用NumPy计算欧几里得距离?

    千次阅读 2020-01-22 13:52:33
    我在3D有两点: (xa, ya, za) (xb, yb, zb) 我想计算距离: dist = sqrt((xa-xb)^2 + (ya-yb)^2 + (za-zb)^2)
  • Numpy与Matlab科学计算对比MATLAB®和NumPy / SciPy有很多共同之处。但是有很多不同之处。创建NumPy和SciPy是为了用Python最自然的方式进行数值和科学计算,而不是MATLAB®克隆。关键的差异MATLABNumPy在MATLAB®...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,068
精华内容 427
关键字:

numpy中可执行矩阵乘法运算符的是