前言:在linux下安装numpy模块非常简单,执行pip install numpy
即可
用法:
import numpy as np
a = np.ndarray((3,5))
print(a)
print(a.shape) #矩阵的形状 三行五列
print(type(a)) #a的类型
输出的结果为
[[ 6.90897762e-310 4.64536969e-310 0.00000000e+000 0.00000000e+000
0.00000000e+000]
[ 0.00000000e+000 0.00000000e+000 0.00000000e+000 0.00000000e+000
0.00000000e+000]
[ 0.00000000e+000 0.00000000e+000 0.00000000e+000 0.00000000e+000
6.32404027e-322]] # 这些仅代表形状
(3, 5)
'numpy.ndarray'> # 可以理解为矩阵
numpy方法 | 解释 |
---|---|
1.numpy.dtype | 指定当前numpy对象的整体数据 |
2.numpy.ndim | 数组轴的个数,在python中轴的个数称为秩 |
3.numpy.shape | 轴,查看数组的形状,对于矩阵n行m列 |
4.numpy.reshape(n,m) | 矩阵转置,改变数组的形状为n行m列 |
5.numpy.size | 数组元素的个数,等于shape属性中元组元素的乘积 |
6.numpy.itemsize | 对象中每个元素的大小, 单位字节 |
7.numpy.ndarray((n,m)) | 创建一个n行m列的矩阵但没有实际数据 |
8.numpy.array(((2,3,4),(1,2,3))) | 创建一个两行三列的数组 |
9.numpy.arange(x,y,z) | 和python中range的用法一样,x起始,y截止,z步长 |
10.numpy.arange(24).reshape((2,3,4)) | 创建一个2维3行4列的数据可以索引和切片 |
11.numpy.linspace(x,y,z) | 等间距生成,x起始,y截止,z个数 |
12.numpy.ones(n,m) | 生成n行m列内容都是1的数组,可传递多维数组 |
13.numpy.zeros(n,m) | 生成n行m列内容都是0的数组,可传递多维数组 |
14.x.astype(numpy.bool) | 转换x数组的数据类型 |
15.numpy.mat() | 将python列表转化为矩阵matrix对像 |
16.numpy.matrix() | 将python列表转化为矩阵matrix对像(同上) |
17.numpy.mat().getA() | 将matrix对象转成ndarray对象 |
18.x.tolist() | 转换成python列表, 用于和python原生结合写程序 |
19.numpy.tile() | 重复某个数组。比如tile(A,n),功能是将数组A重复n次,构成一个新的数组 |
20.x.T | 矩阵转置, 行变列, 列变行, 对角线翻转矩阵 |
21.numpy.multiply(x, y) | 矩阵x 矩阵y相乘(保证矩阵的行列相等,数值相等) |
22.numpy.unique() | 数组去重, 并且从小到大生成一个新的数组 |
23.numpy.full([n,x, y], z) | 自定义模板数组, 生成n维度x行y列都是z的数组 |
24.numpy.eye(x) | 创建一个正方的x*x单位的矩阵, 对角线为1, 其余为0 |
25.numpy.flatten() | 数组降维, 不改变 原值 |
26.numpy.random.rand(x, y, z)/numpy.random.random((x, y, z)) | 随机生成一个x维y行z列的数组 |
27.numpy.random.randn(x, y) | 正态分布随机数 |
28.numpy.random.randint(x,y,(z)) | 整数在x和y(不包括z)之间随机z个数 |
29.x.sum(axis=None) | 求和, axis=0为列, 1为行.默认全部 |
30.numpy.argsort() | 矩阵每个元素坐标排序 |
31.numpy.sort() | 从小打大排序 有个参数axis默认值为1 |
32.numpy.mean(x,axis=None) | 求数组x的平均值 |
33.numpy.average(x,axis=None,weights=None) | 加权平均,weights加权值,不设为等权重 |
34.numpy.var(x,axis=None) | 方差:各数与平均数之差的平方的平均数 |
35.numpy.argmin(x,axis=None) | 求数组中最小值的坐标 |
36.numpy.median(x,axis=None) | 中位数 |
37.numpy.ptp(x,axis=None) | 元素最大值与最小值的差 |
38.numpy.cumsum() | 累加,cumsum和cumprod之类的方法不聚合,产生一个中间结果组成的数组,默认一维数组,1为按原样 |
39.numpy.cumprod() | 累乘 |
40.numpy.count_nonzero(arr > 0) | 计数非0值个数,布尔值会被强制转换为1和0,可以使用sum()对布尔型数组中的True值计数 |
41.(a,numpy.bool()) | 测试数组中是否存在一个或多个True |
bool | 布尔值 |
---|---|
int | 整型 |
float | 浮点型 |
complex | 复数 |
object | 对象 |
string_ | ASCII字符 |
unicode_ | Unicode所有字符, 字节数平台决定 |
矩阵的乘法运算dot
例如出现这样一个情况:一个节目表演的,a去参加.表演完之后由5名观众和3名评委投票来决定是否通过.当然评委的权重值要比观众投票的权重值大.
观众和评委的投票结果如下(通过票就表示为1,不通过就用-1表示):
观众:a[-1,-1,1,-1,-1] b[-1,-1,1,1,-1]观众的权重值:0.2
评委:[1,-1,1] b[,1,1,-1] 评委的权重值为0.5
那么代码我们就可以这样写:
import numpy as np
grade = np.array(([-1,-1,1,-1,-1,1,-1,1],[-1,-1,1,1,-1,1,1,-1])) #把投票结果卸载一个数组里面
wv = np.array(((0.2),(0.2),(0.2),(0.2),(0.2),(0.5),(0.5),(0.5))) #对应的权重值
print('权重:',wv)
print('转化数组形状:',grade.T) #运用dot,必须是一个n行m列的数组乘以m行x列的数组生成一个n行x列的数组,所以在这里要用.T转换形状
print('评分结果:'np.dot(wv,grade.T)) # dot把评分和对应的权重值相乘,然后结果相加
输出为:
权重: [ 0.2 0.2 0.2 0.2 0.2 0.5 0.5 0.5]
转化数组形状:
[[-1 -1]
[-1 -1]
[ 1 1]
[-1 1]
[-1 -1]
[ 1 1]
[-1 1]
[ 1 -1]]
评分结果: [-0.1 0.3]
显示结果a的最终评分-0.1<1+-1 所以不通过
b的最终评分-0.3>1+-1 所以通过