天天看点

python(9)——numpy多维数组和矩阵计算这就是线性方向 x = 5, y = 3, z = -2 的解

NumPy(Numerical Python)是 Python 语言的一个扩展程序库。其中提供了许多向量和矩阵操作,能让用户轻松完成最优化、线性代数、积分、插值、特殊函数、傅里叶变换、信号处理和图像处理、常微分方程求解以及其他科学与工程中常用的计算,不仅方便易用而且效率更高。

NumPy 是一个开源的Python科学计算基础库,是SciPy、Pandas等数据处理或科学计算库的基础。拥有一个类似于列表的、强大的N维数组对象ndarray,它描述了相同类型的元素的集合。具有实用的线性代数、傅里叶变换和随机生成函数的功能。可以直接完成数组和矩阵运算,无需循环。

1.创建一个数组,数组的shape为(5,2),元素均为0。

import numpy
data=[[0,0],[0,0],[0,0],[0,0],[0,0]]
print(numpy.array(data))
           

2.创建一个表示国际象棋棋盘的8*8数组。其中,棋盘白格用0填充,棋盘黑格用1填充。

import matplotlib.pyplot as plt
import numpy as np

b1 = np.array([[(1),(0),(1),(0)]])#构建第一行的一半
b2 = np.array([[(0),(1),(0),(1)]])#构建第二行的一半
b3=np.vstack((b1,b2))#组合成可循环利用的部分
b4=np.vstack((b3,b3))#构造出棋盘的1/4
b5=np.hstack((b4,b4))#构造出棋盘的1/2
b6=np.vstack((b5,b5))#构造出完整的棋盘
plt.imshow(b6)
plt.show()
           

3.阅读下面文字和程序,理解numpy在线性代数运算中的运用。

numpy.linalg.solve() 函数给出了矩阵形式的线性方程的解。

numpy.linalg.inv() 函数计算矩阵的乘法逆矩阵。

逆矩阵(inverse matrix):设A是数域上的一个n阶矩阵,若在相同数域上存在另一个n阶矩阵B,使得: AB=BA=E ,则我们称B是A的逆矩阵,而A则被称为可逆矩阵。注:E为单位矩阵。

考虑以下线性方程:

x + y + z = 6

2y + 5z = -4

2x + 5y - z = 27

可以使用矩阵表示为:

如果矩阵称为A、X和B,方程变为:

AX = B

X = A^(-1)B

import numpy as np 
 
a = np.array([[1,1,1],[0,2,5],[2,5,-1]]) 
 
print ('数组 a:')
print (a)
ainv = np.linalg.inv(a) 
 
print ('a 的逆:')
print (ainv)
 
print ('矩阵 b:')
b = np.array([[6],[-4],[27]]) 
print (b)
 
print ('计算:A^(-1)B:')
x = np.linalg.solve(a,b) 
print (x)
           

这就是线性方向 x = 5, y = 3, z = -2 的解

import numpy as np

a = np.array([[1, 1, 1], [0, 2, 5], [2, 5, -1]])

print('数组 a:')
print(a)
ainv = np.linalg.inv(a)

print('a 的逆:')
print(ainv)

print('矩阵 b:')
b = np.array([[6], [-4], [27]])
print(b)

print('计算:A^(-1)B:')
x = np.linalg.solve(a, b)
print(x)
           

请安装numpy包,并创建数组

pycharm导入第三方库numpy

import numpy
           

numpy对象常用属性

#numpy对象常用属性

import numpy as np
a=np.array([[1,2,3],[4,5,6]])
print('a.ndim=',a.ndim)
print(a)
print(a.dtype)
print(a.size)
b=a.reshape(3,2)
print(b.ndim)
print(b)
print(b.shape)
print(b.itemsize)
           

创建ndarry对象

#创建ndarry对象

import numpy as np
a=np.array([1,2,3])
print(a)
b=np.array([[1,2],[3,4]])
print(b)
c=np.array([1,2,3,4,5],ndmin=2)
print(c)
d=np.array([1,2,3],dtype=complex)
print(d)
           

创建nmupy对象

#创建nmupy对象

import numpy as np
x=np.zeros(5)
print(x)
y=np.zeros((5,),dtype=np.int)
print(y)
print()
z=np.zeros((2,2),dtype=[('x','i4'),('y','i4')])
print(z)
           

从已有的数组来创建numpy数组

#从已有的数组来创建numpy数组

import numpy as np
x=[1,2,3]
a=np.asarray(x)
print(a)
print()
y=[(1,2,3),(4,5)]
b=np.asarray(y)
print(b)
           

从数值范围创建numpy数组

#从数值范围创建numpy数组

import numpy as np
x=np.arange(10,21,2)
print(x)

y=np.linspace(10,20,5,endpoint=False)
print(y)

z=np.logspace(0,9,10,base=2)
print(z)
           

数组的运算

#数组的运算

import numpy as np
a=np.array([1,2,3])
b=np.array([3,4,5])
print(a+b)
print(a/b)
print()

c=np.array([[0],[1],[2],[3]])
d=np.array([1,2,3])
print(c)
print()
print(d)
print()
print(c+d)

print(c*2)