当前位置:   article > 正文

numpy的简单使用(三)_np.matrix

np.matrix

目录

9.矩阵

1.使用np.mat方法来创建我们的矩阵

2.使用np.matrix函数来创建我们的矩阵

3.矩阵运算

1.矩阵的转置

 2.矩阵的乘法

 3.矩阵对应元素相乘

 4.矩阵的数乘

5.使用分块矩阵拼合成大矩阵 

 6.共轭转置

7.、逆矩阵

 10.通用函数

 11.比较运算

 12.逻辑运算

 13.数学函数

 14.简单的统计分析

1.读写文件

 2.排序

 二维数组排序

 间接排序

 3.去重与重复

 4.条件计算

 5.数学和统计方法


9.矩阵

1.使用np.mat方法来创建我们的矩阵

这里我们先导入numpy的包,再使用我们的np.mat函数来创建矩阵,其中矩阵的每一行的数据我们都用“;”来分隔。

  1. import numpy as np
  2. matr1=np.mat('1,2,3;4,5,6;7,8,9')
  3. print(matr1)

2.使用np.matrix函数来创建我们的矩阵

使用np.matrix函数,我们直接传入一个二维数组,我们就能够成功创建一个矩阵。

  1. matr2=np.matrix([[1,2,3],[4,5,6],[7,8,9]])
  2. print(matr2)

3.矩阵运算

1.矩阵的转置

print(matr1.T)

 2.矩阵的乘法

print(matr1*matr2)

 3.矩阵对应元素相乘

  1. matr3=np.multiply(matr1,matr2)
  2. print(matr3)

 4.矩阵的数乘

print(matr2*3)

5.使用分块矩阵拼合成大矩阵 

这里我们创建了一个特征值为3的矩阵arr1和一个3*特征值为3的矩阵arr2,然后用我们的np.bmat函数将我们的矩阵按照第一行为arr1和arr2,第二行为arr2,arr1的顺序拼接起来,从而形成我们的大矩阵(此处的bmat和我们前面讲的mat函数有相似之处,都是通过分号来划分每一行所有的矩阵)

  1. arr1=np.eye(3)
  2. arr2=3*arr1
  3. matr3=np.bmat('arr1 arr2;arr1 arr2')
  4. print(matr3)

 6.共轭转置

共轭转置就是先取共轭,再取转置。共轭就是将复数的实部不变,将虚部的正负号取反,转置就是将整个矩阵沿着主对角线对应元素交换位置。Python中复数的表示是实部+虚部j,虚部如果只写j是不对的,一定要在j前面加上具体的数据。 

  1. matr4=np.matrix([[1-7j,2,3-9j],[4,5-10j,6],[7+7j,8,9-8j]])
  2. print(matr4)
  3. print(matr4.H)

7.、逆矩阵

  1. matr2=np.matrix([[1,2,3],[4,5,6],[7,8,9]])
  2. print(matr2)
  3. print(matr2.I)

 10.通用函数

通用函数ufunc能够对数组中所有的元素进行操作。ufunc针对数组进行操作,其结果也为数组,且参与运算的两个数组必须形状相同。

  1. #加法
  2. x=np.array([1,1,2,6,4])
  3. y=np.array([6,7,8,2,1])
  4. print(x+y)
  5. print(np.add(x,y))
  6. #减法
  7. print(x-y)
  8. print(np.subtract(x,y))
  9. #乘法
  10. print(x*y)
  11. print(np.multiply(x,y))
  12. #整除
  13. print(np.floor_divide(x,y))
  14. print(x//y)
  15. #小数除法
  16. print(np.divide(x,y))
  17. print(np.true_divide(x,y))
  18. print(x/y)
  19. #幂运算
  20. print(np.power(x,y))
  21. print(x**y)
  22. #求余运算
  23. print(np.remainder(x,y))
  24. print(x%y)

 11.比较运算

比较运算的返回结果为一个布尔类型数组

  1. x=np.array([1,1,2,6,4])
  2. y=np.array([6,7,8,2,1])
  3. print(x<y)
  4. print(np.less(x,y))
  5. print(x>y)
  6. print(np.greater(x,y))
  7. print(x==y)
  8. print(np.equal(x,y))
  9. print(x>=y)
  10. print(np.greater_equal(x,y))
  11. print(x<=y)
  12. print(np.less_equal(x,y))
  13. print(x!=y)
  14. print(np.not_equal(x,y))

 12.逻辑运算

np.all函数就是如果x,y两个数组中每一个元素都是对应相等的,就返回true,否则就返回false

np.any函数就是如果x,y两个数组中有元素是相等的,就返回true,全部都不相等的话就返回false

  1. x=np.array([1,1,2,6,4])
  2. y=np.array([6,1,8,2,1])
  3. print(np.all(x==y))
  4. print(np.any(x==y))

 13.数学函数

  1. x=np.array([-1,-1,2,-6,4])
  2. y=np.array([1,9,16])
  3. print(np.abs(x))
  4. print(np.sqrt(y))
  5. print(np.square(x))
  6. print(np.exp(x))
  7. print(np.log(y))
  8. print(np.sin(x))

 14.简单的统计分析

1.读写文件

使用np.save函数,将我们创建的arr数组存储到savetxt文件当中,此时我们可以发现在我们的项目列表中多了一个savetxt.txt的文件。使用我们的loadtxt函数,我们就可以把我们刚刚生成的savetxt.txt函数读取到我们的arr1数组中。或者使用genfromtxt函数,也可以将我们savetxt.txt文件中的数据读取到我们的arr2数组中

  1. arr=np.arange(0,12,0.5).reshape(4,-1)
  2. print(arr)
  3. np.savetxt("savetxt.txt",arr)
  4. arr1=np.loadtxt('savetxt.txt')
  5. print(arr1)
  6. arr2=np.genfromtxt('savetxt.txt')
  7. print(arr2)

 

 2.排序

使用np.sort函数或者使用arr.sort()方法都能够让我们的数组进行排序。

  1. np.random.seed(42)
  2. arr=np.random.randint(1,10,size=10)
  3. print(arr)
  4. print(np.sort(arr))
  5. arr.sort()
  6. print(arr)

 

 二维数组排序

axis=1是针对每一行进行排序,axis=0是针对每一列进行排序

  1. np.random.seed(49)
  2. arr1=np.random.randint(1,9,size=[3,3])
  3. print(arr1)
  4. arr1.sort(axis=1)
  5. print(arr1)
  6. arr2=np.random.randint(1,9,size=[3,3])
  7. print(arr2)
  8. arr2.sort(axis=0)
  9. print(arr2)

​​​​​​​

 间接排序

从下面的代码中,我们可以看到我们的数组中1是最小的,所以我们arr.argsort函数生成的数组中,是按照从小到大排序的。argsort数组的每一个元素所指向的都是arr数组中的索引。意思就是从小到大,依次为arr[1],arr[3],arr[7],arr[0]……以此类推。

  1. arr=np.random.randint(1,10,size=8)
  2. print(arr)
  3. print(arr.argsort())

 

ar.lexsort可以对多个数组进行间接排序,此处我们是按照arr2的排列顺序产生序列,此处我们可以看到arr2的数组是被从小到大完成了排序,而且我们的arr数组按照我们arr2数组排序时调换的顺序进行了数据的调换。(在arr2数组中,最小的元素100是第四个,在arr1数组中对应的是第四个元素,当我们的100在arr2数组中被交换到第一个位置的时候,我们的5也同样在arr1数组中交换到了第一个位置上,以此类推)

  1. arr1=np.array([3,2,6,5,4])
  2. arr2=np.array([400,300,600,100,200])
  3. d=np.lexsort((arr1,arr2))
  4. print(arr1[d])
  5. print(arr2[d])

 

 3.去重与重复

 在我们采集的数据中存在许多重复的数据,我们可以使用np.unique函数来去除我们的重复元素,也可以使用我们之前的方法,将我们的np.array类型转换为集合类型,因为集合类型是不允许重复数据的,所以重复的数据就会被去除,我们再将我们的集合类型转换为list列表类型,我们就得到了一张去除重复数据的列表,这两个方法是等价的。

  1. names=np.array(['mike','libai','dufu','amy','lisalisa','jojo','jojo','libai'])
  2. print(names)
  3. print(np.unique(names))
  4. print(np.array(list(set(names))))

 我们可以使用np.tile函数对我们的数组进行重复操作,tile第一个参数为我们需要重复的列表对象,第二个参数为重复次数。这里我们可以看出tile函数是对整个数组进行整体重复

  1. arr=np.arange(5)
  2. print(arr)
  3. print(np.tile(arr,3))
  4. arr2=np.arange(6).reshape(3,2)
  5. print(arr2)
  6. print(np.tile(arr2,2))

 从下面的代码中我们可以发现repeat函数是将每一个单个元素连续复制。并且如果对一个二维数组进行repeat,这个二维数组会变成一个一维数组。当然我们可以通过指定axis(复制的轴)来使我们二维数组复制之后还是二维数组。在我们下面的示例中,axis=1就是按照行对我们的二维数进行复制,如果axis=0就是按照列对我们的二维数组进行复制。

  1. arr=np.arange(5)
  2. print(arr)
  3. arr2=np.arange(6).reshape(3,2)
  4. print(arr2)
  5. print(np.repeat(arr,2))
  6. print(arr.repeat(3))
  7. print(np.repeat(arr2,2))
  8. arr3=np.arange(6).reshape(3,2)
  9. print(arr3)
  10. arr2.repeat(4,axis=0)
  11. arr2.repeat(4,axis=1)
  12. print(np.repeat(arr2,4,axis=1))

 4.条件计算

当条件为TRUE时,取xarr中的元素,当条件为FALSE时,取yarr中的元素

  1. xarr=np.array([1.1,1.2,1.3,1.4,1.5])
  2. yarr=np.array([2.1,2.2,2.3,2.4,2.5])
  3. cond=np.array([True,False,True,True,False])
  4. result=np.where(cond,xarr,yarr)
  5. print(result)

 5.数学和统计方法

以下代码中的print代码中的前后两个方法是等价的。且对于二维数组,axis=0是纵向,axis=1是横向。

  1. xarr=np.array([1.1,1.2,1.3,1.4,1.5,1.6]).reshape(2,3)
  2. print(xarr)
  3. #均值
  4. print(xarr.mean(axis=0),np.mean(xarr,axis=0))
  5. #求和
  6. print(xarr.sum(axis=0),np.sum(xarr,axis=0))
  7. #方差
  8. print(xarr.var(axis=0),np.var(xarr,axis=0))
  9. #标准差
  10. print(xarr.std(axis=0),np.std(xarr,axis=0))
  11. #max方法按照列进行输出最大值,而argmax则是按列找到最大值的索引
  12. print(xarr.max(axis=0),xarr.argmax(axis=0))
  13. #min方法按照列进行输出最小值,而argmin则是按列找到最大小值的索引
  14. print(xarr.min(axis=0),xarr.argmin(axis=0))
  15. #累积和,就是后面的每一个数都是前面所有数的累和
  16. print(xarr.cumsum(axis=0))
  17. #累计积,就是后面的每一个数都是前面所有数的累积
  18. print(xarr.cumprod(axis=0))

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/679047
推荐阅读
相关标签
  

闽ICP备14008679号