文章目录
##0.导入numpy
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import numpy as np
#from numpy import * 和 import numpy as np的区别
#当我们使用from * 的时候,会取得模块顶层左右赋值的变量名的拷贝。。
#后者是通过模块名获取变量名
#在实践中, "from module import *" 不是良好的编程风格,如果使用from导入变量,且那些变量碰巧和作用域中现有变量同名,那么变量名就会被悄悄覆盖掉。使用import语句的时候就不会发生这种问题,因为我们是通过模块名才获取的变量名,像module.attr不会和现有作用域的attr冲突。
# 显示numpy版本信息
print (np.version.version)
##1.创建数组/矩阵
# 以List或tuple产生一维数组
print (np.array([1, 2, 3, 4]))
print (np.array((1.2, 2, 3.3, 4)))
# 以List或tuple产生二维数组
a = np.array([[1, 2], [3, 4]])
print (a)
# 生成数组时指定数据类型
a = np.array((1.2, 2, 3, 4), dtype = np.int32)
print (a)
# 以np.zeros创建三维数组
a = np.zeros((2, 2, 2))
print (a)
# 使用arange生成数组
a = np.arange(15) # 生成0-14 共15个数字
print (a)
# 使用reshape生成3*5数组
a = np.arange(15).reshape(3, 5)
print (a)
# 从1到10产生5个数
a = np.linspace(1, 10, 5)
print (a)
# 使用numpy.zeros, numpy.ones, numpy.eye方法构造特定矩阵
a = np.zeros((3, 4))
print (a)
a = np.ones((5, 5))
print (a)
a = np.eye(3)
print (a)
# 生成随机矩阵
# np.random.rand(a, b):生成a行b列的矩阵,随机的浮点数,范围在[0,1)。
a = np.random.rand(2, 3)
print (a)
# np.random.randint(low, high, size):生成形状为size的随机矩阵
# 矩阵的每一个元素都是整数,且范围在[low,high)之间。
a = np.random.randint(0, 10, (2, 3))
print (a)
# python中 list 与数组的互相转换
#list转array
#np.array(a)
#array 转list
#a.tolist()
##2.获得矩阵属性
# 2.获得数组的属性
a = np.zeros((2, 3))
print ("维度:", a.ndim)
print ("矩阵每一维的大小:", a.shape)
print ("数组的元素数:", a.size)
print ("数组的元素类型:", a.dtype)
print ("每个元素所占的字节数:", a.itemsize)
##3.矩阵操作
# 3.数组操作
# 数组索引
a = np.array([[1, 2, 3], [4, 5, 6]])
print (a)
print ("a[1, 2] =", a[1, 2])
# 数组切片
print ("a[1, :] =", a[1, :])
print ("a[1, 1:2] =", a[1, 1:2])
# for 循环遍历矩阵
print ("for循环遍历行:")
for row in a:
print(row)
print ("for循环遍历列:")
for col in np.transpose(a):
print(col)
# 数组赋值
a[1, :] = [7, 8, 9]
print (a)
# 合并数组
b = np.eye(2)
c = np.eye(3)
print ("水平合并:\n",np.hstack((a, b))) # 水平合并
print ("竖直合并:\n",np.vstack((a, c))) # 竖直合并
# 给矩阵添加行或列
print (np.r_[a, c]) # 添加行
print (np.c_[a, b]) # 添加列
注:在使用合并数组或给矩阵添加行列时,不改变原有矩阵的行列数,见下面代码:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import numpy as np
a = np.array([[2,2], [2,2]])
print(a)
b = np.array([[2],[2]])
print(b)
k = np.c_[a, b]
print(a.shape) #结果为(2,2)
print(k.shape) #结果为(2,3)
##4.基本的数组运算
# 4.基本的数组运算
# 4.1使用数组对象自带的方法
print ("a.sum =", a.sum())
print ("a.sum(axis = 0) =", a.sum(axis = 0)) #计算每一列的和
print ("a.min =", a.min())
# 4.2使用numpy下的方法
print (np.sin(a))
print (np.floor(a))
print (np.exp(a))
##5.基本的矩阵运算
import numpy.linalg as nplg #numpy.linalg模块中有很多关于矩阵运算的方法
###5.1 矩阵的加减乘(矩阵乘法、数乘)除
# 5.1 矩阵的加减乘(矩阵乘法、数乘)除
a = np.ones([2, 2])
b = np.eye(2)
print (a)
print (b)
print (a + b)
print (b * 2)
print (a * b) # 数乘:每个元素对应相乘
print (np.dot(a, b)) # 矩阵乘法
print (b / (a * 2)) # 每个元素对应相除
print ((a * 2) ** 4) # 每个元素对应的4次方
###5.2 线性代数运算
# 5.2 线性代数运算
a = np.array([[1, 0], [2, 3]])
print (a)
b = np.mat([[1, 2], [3, 4]])
print ("b = \n", b)
# 矩阵的转置
a = a.transpose()
print ("矩阵的转置:\n", a)
print ("矩阵的转置:\n", b.T)
# 矩阵的迹:方阵主对角线上元素之和
print ("矩阵的迹:\n",np.trace(a))
# 矩阵求逆
print ("矩阵的逆:\n",np.linalg.inv(a))
print ("矩阵的逆:\n", b.I)
# 计算行列式
print ("行列式:\n",np.linalg.det(a))
# 特征值特征向量
print ("特征值特征向量:\n",nplg.eig(a))
# 向量的最大最小值、加和、平均值、范数
print(np.sum(a)) # >>> 47
print(np.max(a)) # >>> 9
print(np.min(a)) # >>> 0
print(np.average(a)) # >>> 4.7
print(np.linalg.norm(a)) # >>> 18.1383571472
# 向量内积
v1 = np.array([1, 2, 3])
v2 = np.array([2, 3, 4])
print (np.inner(v1, v2))
# 求范数
x = np.array([[0, 3, 4], [2, 6, 4]])
y = np.linalg.norm(x, axis = 1)
print ("x = \n", x)
print ("向量x的一范数y = ", y)
a=np.array([[complex(1,-1),3],[2,complex(1,1)]])
print(a)
print("矩阵2的范数")
print(np.linalg.norm(a,ord=2) ) #计算矩阵2的范数
print("矩阵1的范数")
print(np.linalg.norm(a,ord=1) ) #计算矩阵1的范数
print("矩阵无穷的范数")
print(np.linalg.norm(a,ord=np.inf) )
###5.3 矩阵的轴参数
轴(axis)表示的是矩阵的维度,以下图为例:
>>>df = pd.DataFrame([[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]], \
columns=["col1", "col2", "col3", "col4"])
>>>df
col1 col2 col3 col4
0 1 1 1 1
1 2 2 2 2
2 3 3 3 3
如果我们调用df.mean(axis=1),我们将得到按行计算的均值
>>> df.mean(axis=1)
0 1
1 2
2 3
简单的来记就是axis=0代表跨行(down),而axis=1代表跨列(across)。
换句话说:
使用0值表示沿着每一列或行标签\索引值向下执行方法
使用1值表示沿着每一行或者列标签模向执行对应的方法
https://www.cnblogs.com/rrttp/p/8028421.html
教程1:
https://www.jb51.net/article/49397.htm
教程2:
https://blog.csdn.net/guoziqing506/article/details/71078576