精华内容
下载资源
问答
  • [numpy] a==b 两矩阵相同元素的比较

    千次阅读 2018-05-17 20:43:56
    http://blog.csdn.net/tintinetmilou/article/details/78555486
    展开全文
  • 报如下错误:TypeError: ufunc did not contain a loop with signature matching types dtype('U32')首先我在想会不会是这矩阵的元素类型不同,不允许相加减呀?但是明明浮点数和整数是可以相加减的。然后上网搜...

    报如下错误:

    TypeError: ufunc did not contain a loop with signature matching types dtype('U32')

    首先我在想会不会是这两个矩阵的元素类型不同,不允许相加减呀?但是明明浮点数和整数是可以相加减的。

    287ed9182b9f05cd8492e04e0ff36a47.png

    然后上网搜了搜,原来如此,是因为这两个矩阵的dtype不同,可能一个是float64,一个是|S32,在numpy里,当数组或矩阵的dtype不相同时,是不允许相加减的,会报上面的错误,所以只需像y = y.astype('float64')这样转换类型就好,注意y.astype('float64')是没有用的,本质y的dtype是没有改变的,你需要重现将y指向y.astype('float64')内容才行;

    import numpy as np
     
    x = np.array([1, 2, 2.5])
    print(x.dtype)
    x.astype(int)
    print(x.dtype)
     
    y = np.array([3, 6, 2], dtype='S32')
    print(y.dtype)
    y = y.astype('float64')
    print(y.dtype)
    print(x-y)
    
    结果
    float64
    float64
    |S32
    float64
    [-2.  -4.   0.5]
    展开全文
  • 矩阵是一个由m*n个数排成的m行n列的表称为m行n列的矩阵,简称为m*n矩阵。下面的矩阵是一个3*2(3乘2)矩阵,因为它有三行四列。在数学的概念中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,最早来自于...

    矩阵是一个由m*n个数排成的m行n列的表称为m行n列的矩阵,简称为m*n矩阵。下面的矩阵是一个3*2(3乘2)矩阵,因为它有三行四列。

    e10bca5f769ef7c50ffd704146dd6ca5.png

    在数学的概念中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,最早来自于方程组的系数及常数所构成的方阵。这一概念由19世纪英国数学家凯利首先提出。

    矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中。 矩阵的运算是数值分析领域的重要问题。将矩阵分解为简单矩阵的组合可以在理论和实际应用上简化矩阵的运算。对一些应用广泛而形式特殊的矩阵,例如稀疏矩阵和准对角矩阵,有特定的快速运算算法。

    Python列表生成矩阵

    在Python中也有矩阵的概念,但是Python中没有矩阵这种的内置类型。但是我们可以将Python中的列表看做一个矩阵。例如:

    A = [[2,8], [-5,32], [0,8]]

    我们可以把这个列表看做为是一个3行2列的矩阵。

    c0085a6f3641a629a63e4baf8cd9db79.png

    接下来我们看一下如何使用嵌套列表。

    A = [[1, 4, 5, 12], [-5, 8, 9, 0], [-6, 7, 11, 19]] print("A =", A) print("A[1] =", A[1]) # 第二行 print("A[1][2] =", A[1][2]) # 第二行的第三个元素 print("A[0][-1] =", A[0][-1]) # 第一行的最后一个元素 column = []; # 一个空的列表 for row in A: column.append(row[2]) print("第三列 =", column)

    当我们运行上面的代码的时候,我们得到的输出将会是:

    A = [[1, 4, 5, 12], [-5, 8, 9, 0], [-6, 7, 11, 19]] A[1] = [-5, 8, 9, 0] A[1][2] = 9 A[0][-1] = 12 第三列 = [5, 9, 11]

    使用嵌套的列表作为矩阵来说比较适合用于简单的计算任务,但是在Python中呢我们可以使用Numpy库,它在处理矩阵上有更好的方法。

    Numpy Array(数组)

    Python中的Numpy库是一个用于科学计算的包,它是一个针对n维数组对象的强大的库,在想要使用Numpy之前,我们需要安装它才可以,那么我们怎么样才可以安装它呢?答案很简单,我们只需要在我们的电脑上下载安装Anaconda就可以了,Anaconda它本身就自带Numpy和其他的几个跟数据科学还有机器学习相关的库。

    一旦我们安装完成了之后,我们就可以导入并使用它的功能了。Numpy提供针对数字的多维数组(实际上只是一个对象)举个例子来说:

    import numpy as np a = np.array([1, 2, 3]) print(a) #打印变量a print(type(a)) #输出变量a的数据类型

    最终的输出为

    [1 2 3] <class 'numpy.ndarray'>

    就像你看到的输出一样,Numpy中的数组类名为ndarray。

    那么我们如何创建一个Numpy数组呢?创建Numpy数组有很多方法,以下我们介绍一下创建数组的几种方法。

    1.创建整数、浮点数、和复数的数组

    import numpy as np A = np.array([[1, 2, 3], [3, 4, 5]]) #创建一个整数数组 print(A) A = np.array([[1.1, 2, 3], [3, 4, 5]]) #创建一个小数数组 print(A) A = np.array([[1, 2, 3], [3, 4, 5]], dtype = complex) # 创建一个复数数组 print(A)

    当运行上方的代码时,我们得到的代码输出将会是:

    [[1 2 3] [3 4 5]] [[1.1 2. 3. ] [3. 4. 5. ]] [[1.+0.j 2.+0.j 3.+0.j] [3.+0.j 4.+0.j 5.+0.j]]

    2.创建0和1的数组

    创建一个充满0的数组,我们需要使用np.zeros函数,np.zeros函数的参数如下:

    np.zeros(shape,dtype=float,order=“C”):返回一个给定形状和类型的用0填充的数组,一般我们只需要设置第一个参数就可以了;

    Shape:数组的形状

    dtype:数据类型,可选参数,默认为Numpy.float64(浮点数)

    order:可选参数,C代表行优先;F代表列优先

    dtype包括的数据类型:

    参数代表意义t位数t4代表4位数b布尔值(bool)true或者falsei整数(int)i8(64位)u无符号整数u8(64位)f浮点数f8(64位)c浮点负数o对象s字符串s24u编码u24

    下面我们就创建一个3行2列内容为0的数组

    import numpy as np zeors_array = np.zeros( (3, 2) ) print(zeors_array)

    运行上方的代码我们得到的输出为:

    [[0. 0.] [0. 0.] [0. 0.]]

    创建一个充满1的数组,我们需要使用np.ones函数,np.ones函数的参数如下:

    np.ones(shape,dtype=float,order=“C”):返回一个给定形状和类型的用1填充的数组,函数内的参数与np.zeros相同,一般只需要设置第一个参数就好了。

    下面我们生成一个5行5列类型为整数的数组。

    import numpy as np ones_array = np.ones((5,5),dtype=np.int32) print(ones_array)

    运行上方的代码,在代码中我们将dtype设置为int32位,占4个字节。因此这个数组可以取 -2147483648 ~ 2147483647之间的值,我们得到的输出为:

    [[1 1 1 1 1] [1 1 1 1 1] [1 1 1 1 1] [1 1 1 1 1] [1 1 1 1 1]]

    3.使用arange()和reshape()生成矩阵

    np.arange(起点,终点,步长)函数返回一个有起点终点的固定步长的列表。np.arange函数分为三种情况:

    1、一个参数:参数值为终点,起点取值默认为0,步长默认为1
    2、 两个参数:第一个参数为起点,第二个参数为终点,步长默认为
    3、 三个参数:第一个参数为起点,第二个参数为终点,第三个参数为步长(支持小数)

    np.reshape(shape):shape参数为要设置矩阵的形状

    下面我们生成一个长度为12的一维矩阵,然后将其设置为一个3行4列的矩阵

    import numpy as np a = np.arange(12) print('a =',a) b = np.arange(12).reshape(3,4) print('b =',b)

    通过运行上方的代码我们得到的输出为:

    a = [ 0 1 2 3 4 5 6 7 8 9 10 11] b = [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]]

    矩阵运算

    下面,我们将通过两个矩阵的加法,两个矩阵的乘法和一个矩阵的转置。我们之前可以使用嵌套的列表来编写这些。那么接下来我们看一下如何通过Numpy数组完成这些任务。

    矩阵之间的加法

    我们可以使用+这个运算符来计算两个numpy矩阵的对应元素

    import numpy as np A = np.array([[3, 7], [5, -8]]) B = np.array([[2, -4], [2, 0]]) C = A + B print(C)

    运行上方的代码我们得到的输出为

    [[ 5 3] [ 7 -8]]

    矩阵之间的乘法

    要将两个矩阵相乘,我们需要使用dot()方法,需要注意的是*只能用于数组乘法(两个数组对应元素的乘法),不用于矩阵乘法。

    import numpy as np A = np.array([[4,5,6], [-5, 0, 2]]) B = np.array([[3, 2], [4, -1], [4, -3]]) C = A.dot(B) print(C)

    运行代码我们得到的输出为:

    [[ 56 -15] [ -7 -16]]

    矩阵的转置

    我们可以使用numpy.transpose来计算矩阵的转置。

    import numpy as np A = np.array([[1,3,5], [2,2,1], [3,0,-3]]) print(A.transpose())

    运行代码我们可以得到矩阵的转置,将列转为行,将行转为列。

    [[ 1 2 3] [ 3 2 0] [ 5 1 -3]]

    正如代码运行出的结果那样,使用Numpy我们可以更加简单的完成我们的任务。

    查看矩阵中的元素、行与列

    查看矩阵中的元素

    查看矩阵中的元素跟列表比较相似,我们可以通过索引来查看矩阵中的元素,让我们先从简单的一维数据开始。

    import numpy as np A = np.array([2, 4, 6, 8, 10, 12, 14]) print("A[0] =", A[0]) # 查看数组中的第一个元素 print("A[2] =", A[2]) # 查看数组中的第三个元素 print("A[-1] =", A[-1]) # 查看数组中的最后一个元素

    运行代码我们得到的输出为:

    A[0] = 2 A[2] = 6 A[-1] = 14

    接下来我们查看如何查看一个二维数组(就是一个矩阵)的元素

    import numpy as np A = np.array([[11, 24, 3, 0], [-3, 7, 10, 8], [0, -7, 25, 32]]) #查看第一行的第一个元素 print("A[0][0] =", A[0][0]) #查看第二行的第三个元素 print("A[1][2] =", A[1][2]) #查看最后一行的最后一个元素 print("A[-1][-1] =", A[-1][-1])

    运行上方的代码我们得到的输出为:

    A[0][0] = 11 A[1][2] = 10 A[-1][-1] = 32

    查看矩阵中的行

    import numpy as np A = np.array([[11, 24, 3, 0], [-3, 7, 10, 8], [0, -7, 25, 32]]) print("A[0] =", A[0]) # 查看第一行 print("A[2] =", A[1]) # 查看第二行 print("A[-1] =", A[-1]) # 查看最后一行 (在这个矩阵中为第三行)

    运行代码我们得到的输出为:

    A[0] = [11 24 3 0] A[2] = [-3 7 10 8] A[-1] = [ 0 -7 25 32]

    查看矩阵中的列

    import numpy as np A = np.array([[11, 24, 3, 0], [-3, 7, 10, 8], [0, -7, 25, 32]]) print("A[:,0] =",A[:,0]) # 查看第一列 print("A[:,3] =", A[:,2]) # 查看第三列 print("A[:,-1] =", A[:,-1]) #查看最后一列(在这个矩阵中为第四列)

    运行代码我们得到的输出为:

    A[:,0] = [11 -3 0] A[:,3] = [ 3 10 25] A[:,-1] = [ 0 8 32]

    矩阵的切片

    一维数组中的切片其实类似于列表,举个例子,让我们看一下矩阵的切片

    import numpy as np matrix = np.array([1, 3, 5, 7, 9, 2, 4, 6, 8, 10]) # 查看第三个到第五个元素 print(matrix[2:5]) # 查看第一个到第四个元素 print(matrix[:-5]) # 查看第六个到最后一个元素 print(matrix[5:]) # 查看第一个元素到最后一个元素 print(matrix[:]) #将列表进行扭转进行查看 print(matrix[::-1])

    运行上面的代码我们可以得到的结果是:

    [5 7 9] [1 3 5 7 9] [ 2 4 6 8 10] [ 1 3 5 7 9 2 4 6 8 10] [10 8 6 4 2 9 7 5 3 1]

    现在我们看一下如何分割一个矩阵。

    import numpy as np A = np.array([[11, 24, 3, 0], [-3, 7, 10, 8], [0, -7, 25, 32]]) print(A[:2, :4]) # 查看前两行和前撕裂 print(A[:1,]) # 查看第一行和所有列 print(A[:,2]) # 查看所有的行和第二列 print(A[:, 2:5]) #查看所有的行和第三到第五列

    现在运行代码,查看一下最终的结果。

    [[11 24 3 0] [-3 7 10 8]] [[11 24 3 0]] [ 3 10 25] [[ 3 0] [10 8] [25 32]]

    以上就是在Python中Numpy库中矩阵的相关操作,希望可以帮到你理解,有什么问题欢迎进行留言,我们进行讨论哦~。

    展开全文
  • python 矩阵的特殊加、乘法与循环优化经常进行python矩阵运算的可能会用到不同的矩阵操作,...特殊乘法 numpy.kron与numpy.outer今天阅读一段前人的代码,发现一段代码是想通过个一维向量a,b构造一个矩阵。代码用...

    python 矩阵的特殊加、乘法与循环优化

    经常进行python矩阵运算的可能会用到不同的矩阵操作,numpy官方文档给出了不同操作的说明,一般需要的都可以在那里找到。实在难找可以到stack overflow上查一查,不过要考验英文、检索和代码阅读水平。

    特殊乘法 numpy.kron与numpy.outer

    今天阅读一段前人的代码,发现一段代码是想通过两个一维向量a,b构造一个矩阵。代码用了嵌套for循环

    for i, a_i in enumerate(a):
    for j, b_j in enumerate(b):
    c[i,j]=do_something(a_i,b_j)

    仔细阅读这段循环发现它是这样的:
    让a中的第一个元素和b中的所有元素相乘做为输出矩阵的第一行(或第一列)
    让a中第n个元素和b中所有元素相乘为第n行(或第n列)
    …………依次如此 结果如图:

    e01f0c621e9a4d4b615cda193b787fd7.png

    于是查找到符合这一要求的numpy对应的函数 numpy.kron 或者numpy.outer
    当a,b皆为一维向量时,outer和kron结果相同,所以两种方法都可以。
    不过kron用的时候一个必须是行向量,另一个为列向量,而outer很随意。
    经测试,outer在这种情况下比kron要快很多。对比二者文档就会明白,二者针对不同目的。

    于是采用outer函数代替循环,会发现速度得到提升,尤其当a,b长度很大时

    bd21e20c794e6696d6668e5f3ef34766.png

    特殊加法numpy.add.outer

    结果接下来又遇到一段类似的代码,发现是类似的操作不过将加法换做乘法。百度、官方文档貌似都不太好搜,于是去stackoverflow上瞧瞧果然大神们早已问过类似问题并给出了答案numpy.add.outer() 其实还有别的解决方法.

    13cbb7a58e1051f5f9a9ced40a1b3683.png

    展开全文
  • numpy中比较矩阵是否相同

    千次阅读 2019-01-10 13:00:30
    numpy中比较矩阵是否相同
  • 如果矩阵的行数和列数相等并且相应的元素也相等,则它们是相同的。一个例子如下。MatrixA=123456789MatrixB=123456789ThematricesAandBareidentical给出了一个检查矩阵是否相同的程序,如下所示。示例...
  • [work] numpy中比较矩阵是否相同

    千次阅读 2018-11-14 09:39:47
    最近在码代码时想判断矩阵是否完全相同(每个元素都相同),于是我这样写了:      发现用==判断只能返回一个判断矩阵,表示其中每一个元素是否对应相等。  于是我用度娘查了查,应该这么写:  ...
  • #「闪光时刻」主题征文 二期# 在Python中使用Numpy创建向量: x = np.array([1, 2, 3, 4])创建3 x 3矩阵 B = np.array([[1, 2],[3, 4],[5, 6]])Shape形状,也可称为维度,表示矩阵中每个维度的具体数值; B.shape 3 x...
  • 1、矩阵创建及简单操作 (1)可以通过python的list来创建数组,假如说list = [1 , 2 , 3 , 4] ,array_1 = np.array(list_1)创建一个数组。 (2)还可以通过arange来创建数组,比方说array_4 = np.arange(1 ,10)即...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 输入一个正整数repeat (0读入 1 个正整数 n(1≤n≤6), 再读入2个 n 阶方阵 a和b , 判断2个方阵是否相同。要求:编写判断函数(方法)judge()。例:括号内是说明输入:2 (repeat=2)3 (n=3)1 2 3 4 5 6 7 8 9 (a矩阵)1.....
  • 任意阶数相同两矩阵相加与相乘

    千次阅读 2018-06-13 11:41:14
    ~直接放代码 便于自己以后查看(我写的可能...//两矩阵相乘代码核心部分更改 int [][] c = new int [N][N]; for(int i=0 ; i&lt;N ; i++) { for(int j=0 ; j&lt;N ; j++) { for(int k=0 ; k&lt;N ...
  • 特征值相同矩阵是否相似

    千次阅读 2019-09-02 11:26:03
    矩阵A和B,存在满秩矩阵P,P的转置乘A乘P等于B,二者合同。 特殊考虑情况 对称矩阵的不同的特征值对应的特征向量必定正交 存在正交矩阵Q-1AQ=B,使A和B相似 Q-1等价于Q的转置 所以A和B合同。 合同、等价和...
  • Numpy,是python中的一个矩阵计算包,功能类似matlab的矩阵计算。Numpy的诞生弥补了下面提到的项的不足,numpy提供了种基本的对象:ndarray(N-dimensional array object)和ufunc(universal function object)。...
  • 设有向量A和B,要求出A和B... 如果是求个向量中相同的元素,可使用intersect函数。语法为:  c = intersect(A, B)  其计算公式为c=A ∩B。    还有一个函数ismember(A,B),其结指示向量A中那些元素也在向量B中。
  • 1 致谢 感谢网友Inside_Zhang的帮助, ...需要用在MATLAB中判断矩阵是否完全相等,即:矩阵的所有元素是否完全相同。 开始不知道怎么弄,于是咨询了一下度娘~ 然后就明白啦~ 3 MATLAB中判...
  • kotlin 第一个程序Given two matrices, we have to check them they are ... 给定矩阵,我们必须检查它们是否相同? Example: 例: Input: matrix 1: [2, 3, 5] [0, 5, 4] [2, 1, 2] matr...
  • 你的条件太简单……高级的想法是,a和b中的每一行选择一行,然后确定它是否相同,所以你需要3个循环……码:public class SameRowFinder {public static void main(String[] args){int a[][] = {{1,2},{3,4}};...
  • 但是前天,由于自己的学生装了一个 ubuntu 18.04 的系统,上面有一些数独游戏,偶然间,让我看见了,为了更好的显摆自己的 Python 知识,决定用 Python 写一个程序,所以就有了下面的文字。 1、将待解的数独转换成...
  • a=[1,2,3,4,5,6,7,8,9]; b=[1,4,6,9,12,14]; c=intersect(a,b) % c就是a、b中相同的元素   matlab里关于集合运算和二进制数的运算的函数 intersect:集合交集 ...union :个集合的并
  • 相同大小的矩阵,将其中一个矩阵为零的元素替换为另一元素对应位置的数值 主要是提取出了一个器官轮廓,将其中的元素为1,之外的元素为0,同时也已知其剂量矩阵,但不知道怎么样...
  • MATLAB中查找个不同维度的矩阵相同或者不同元素的位置
  • 斯蒂芬大帝让我们使用下面的代码来衡量性能。importnumpyasnpimporttimeexec_time0=[]exec_time1=[]exec_time2=[]sizeOfArray=5000numOfIterations=200foriinxrange(numOfIterations):A=np.random.randint(0,255,(.....
  • java中把个维数相同矩阵对应的元素相加得到新的矩阵的代码怎么写,在int[][] add(int[][]a,int[][] b)中添加代码,实现这个功能
  • 在对列数相同矩阵的处理中可以借鉴一下我写的代码,初学者,希望大家批评指正,有问题希望你能够回馈,期待交流。
  • pytorch中对于矩阵要进行的操作很多,但是初学者可能并不很清楚矩阵的维度,以及当矩阵维度变大时候,怎么知道我们要操作的维度在哪里。1.学会观察中括号,了解你现在的输出数据到底是在几维空间。tensor([[[0.1205,...
  • 二维矩阵卷积,个图像大小相同 二维矩阵卷积,个图像大小相同
  • 给你一个nm的字符矩阵,一个mn的字符矩阵,问你他们相同的m*m的字符矩阵所在第一个矩阵的行数和第二个矩阵的列数。 题解: 我们把第一个字符矩阵当成一行处理,然后对于第二个字符矩阵,我们预处理所有的mm块将哈希...

空空如也

空空如也

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

两矩阵相同