赞
踩
目录
这里我们先导入numpy的包,再使用我们的np.mat函数来创建矩阵,其中矩阵的每一行的数据我们都用“;”来分隔。
- import numpy as np
- matr1=np.mat('1,2,3;4,5,6;7,8,9')
- print(matr1)
使用np.matrix函数,我们直接传入一个二维数组,我们就能够成功创建一个矩阵。
- matr2=np.matrix([[1,2,3],[4,5,6],[7,8,9]])
- print(matr2)
print(matr1.T)
print(matr1*matr2)
- matr3=np.multiply(matr1,matr2)
- print(matr3)
print(matr2*3)
这里我们创建了一个特征值为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)
共轭转置就是先取共轭,再取转置。共轭就是将复数的实部不变,将虚部的正负号取反,转置就是将整个矩阵沿着主对角线对应元素交换位置。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)
- matr2=np.matrix([[1,2,3],[4,5,6],[7,8,9]])
- print(matr2)
- print(matr2.I)
通用函数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)
比较运算的返回结果为一个布尔类型数组
- 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))
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))
- 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))
使用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)
使用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])
在我们采集的数据中存在许多重复的数据,我们可以使用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))
当条件为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)
以下代码中的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))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。