numpy的简单使用(三)

目录

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函数来创建矩阵,其中矩阵的每一行的数据我们都用“;”来分隔。

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

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

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

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

3.矩阵运算

1.矩阵的转置

print(matr1.T)

 2.矩阵的乘法

print(matr1*matr2)

 3.矩阵对应元素相乘

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

 4.矩阵的数乘

print(matr2*3)

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

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

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

 6.共轭转置

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

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

7.、逆矩阵

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

 10.通用函数

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

#加法
x=np.array([1,1,2,6,4])
y=np.array([6,7,8,2,1])
print(x+y)
print(np.add(x,y))

#减法
print(x-y)
print(np.subtract(x,y))

#乘法
print(x*y)
print(np.multiply(x,y))

#整除
print(np.floor_divide(x,y))
print(x//y)


#小数除法
print(np.divide(x,y))
print(np.true_divide(x,y))
print(x/y)

#幂运算
print(np.power(x,y))
print(x**y)

#求余运算
print(np.remainder(x,y))
print(x%y)

 11.比较运算

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

x=np.array([1,1,2,6,4])
y=np.array([6,7,8,2,1])
print(x<y)
print(np.less(x,y))

print(x>y)
print(np.greater(x,y))

print(x==y)
print(np.equal(x,y))

print(x>=y)
print(np.greater_equal(x,y))

print(x<=y)
print(np.less_equal(x,y))

print(x!=y)
print(np.not_equal(x,y))

 12.逻辑运算

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

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

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

 13.数学函数

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

 14.简单的统计分析

1.读写文件

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

arr=np.arange(0,12,0.5).reshape(4,-1)
print(arr)
np.savetxt("savetxt.txt",arr)
arr1=np.loadtxt('savetxt.txt')
print(arr1)

arr2=np.genfromtxt('savetxt.txt')
print(arr2)

 

 2.排序

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

np.random.seed(42)
arr=np.random.randint(1,10,size=10)
print(arr)
print(np.sort(arr))
arr.sort()
print(arr)

 

 二维数组排序

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

np.random.seed(49)
arr1=np.random.randint(1,9,size=[3,3])
print(arr1)
arr1.sort(axis=1)
print(arr1)
arr2=np.random.randint(1,9,size=[3,3])
print(arr2)
arr2.sort(axis=0)
print(arr2)

​​​​​​​

 间接排序

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

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

 

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

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

 

 3.去重与重复

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

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

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

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

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

arr=np.arange(5)
print(arr)
arr2=np.arange(6).reshape(3,2)
print(arr2)
print(np.repeat(arr,2))
print(arr.repeat(3))
print(np.repeat(arr2,2))

arr3=np.arange(6).reshape(3,2)
print(arr3)
arr2.repeat(4,axis=0)
arr2.repeat(4,axis=1)
print(np.repeat(arr2,4,axis=1))

 4.条件计算

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

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

 5.数学和统计方法

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

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

 

 

  • 21
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桜キャンドル淵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值