第5关:线性代数

news/2024/9/5 19:10:53 标签: 线性代数, 矩阵, python

任务描述

本关任务:编写一个能求解线性方程的函数。

相关知识

为了完成本关任务,你需要掌握:

  1. 如何使用numpy进行矩阵运算
  2. 点积和matmul的区别。

numpy的线性代数

线性代数(如矩阵乘法、矩阵分解、行列式以及其他方阵数学等)是任何数组库的重要组成部分,一般我们使用*对两个二维数组相乘得到的是一个元素级的积,而不是一个矩阵点积。因此numpy提供了线性代数函数库linalg,该库包含了线性代数所需的所有功能。

常用的numpy.linalg函数:
在这里插入图片描述

常用函数

dot():该函数返回俩个数组的点积。对于二维向量,效果等于矩阵乘法;对于一维数组,它是向量的内积;对于N维数组,它是a的最后一个轴上的和与b的倒数第二个轴的乘积。

python">a=np.array([[1,2],[3,4]])

a1=np.array([[5,6],[7,8]])

np.dot(a,a1)  
'''  
输出:array([[19, 22],  
       [43, 50]])  
'''  

det():该函数用于计算输入矩阵的行列式。

python">a = np.array([[14, 1], [6, 2]])

a=linalg.det(a)

print(a)  
'''  
输出:21.999999999999996  
'''  

inv():该函数用于计算方阵的逆矩阵。逆矩阵的定义维如果两个方阵A、B,使得AB = BA = E,则A称为可逆矩阵,B为A的逆矩阵,E为单位矩阵

python"> a=np.array([[1,2],[3,4]])
 
 b=linalg.inv(a)
 
 print(np.dot(a,b))  
'''  
输出:array([[1.0000000e+00, 0.0000000e+00],  
       [8.8817842e-16, 1.0000000e+00]])  
'''  

solve():该函数用于计算线性方程的解。
假设有如下方程组:3x+2y=7 x+4y=14;

写成矩阵的形式:[[3,2][1,4]]*[[x],[y]]=[[7],[14]];

解如上方程组代码如下:

python"> a=np.array([[3,2], [1,4]])
 
 b=np.array([[7],[14]])
 
 linalg.solve(a,b)  
'''  
 输出:array([[0. ],  
       [3.5]])  
 最后解出x=0,y=3.5  
'''  

matmul():函数返回两个数组的矩阵乘积。如果参数中有一维数组,则通过在其维度上附加1来提升为矩阵,并在乘法之后去除。

python">a=[[3,4],[5,6]]

b=[[7,8],[9,10]]

np.matmul(a,b)  
'''  
输出:array([[ 57,  64],  
       [ 89, 100]])  
'''
b=[7,8]

np.matmul(a,b)  
'''  
输出:array([53, 83])  
'''  

svd():奇异值分解是一种矩阵分解的方法,该函数用来求解SVD。

python">a=[[0,1],[1,1],[1,0]]

linalg.svd(a)

'''  
输出:(array([[-4.08248290e-01,  7.07106781e-01,  5.77350269e-01],  
       [-8.16496581e-01,  2.64811510e-17, -5.77350269e-01],  
       [-4.08248290e-01, -7.07106781e-01,  5.77350269e-01]]), array([1.73205081, 1.        ]), array([[-0.70710678, -0.70710678],  
       [-0.70710678,  0.70710678]]))  
'''  

编程要求
请在右侧编辑器Begin-End处补充代码,计算性别为男的线性方程解,前两个数为方程左边,最后一个数为方程右边。

  • 具体要求请参见后续测试样例。

请先仔细阅读右侧上部代码编辑区内给出的代码框架,再开始你的编程工作!

测试说明

平台会对你编写的代码进行测试,对比你输出的数值与实际正确的数值,只有所有数据全部计算正确才能进入下一关。

测试输入:

[[“男”,2,4,40],[“女”,8,3,17],[“男”,8,6,24]]

预期输出:

python">[[-7.2]  
 [13.6]]  

提示:测试数据的方程为2x+4y=40,8x+6y=24。*

python">from numpy import linalg
import numpy as np
def student(input_data):
    '''
    将输入数据筛选性别为男,再进行线性方程求解
    :param input_data:类型为`list`的输入数据
    :return:类型为`ndarray`
    '''
    result=[]
    # ********* Begin *********#
    a = np.array(input_data)
    x=[]
    y=[]
    for i in a:
        if i[0]=="男":
            x.append([int(i[1]),int(i[2])])
            y.append([int(i[-1])])
    if x==[]and y==[]:#若循环内未能检测到"男",则在此判断句中将result返回[]
        return result
    x=np.array(x)
    y=np.array(y)
    result = linalg.solve(x,y)

    # ********* End *********#
    return result


http://www.niftyadmin.cn/n/1230828.html

相关文章

第1关:Numpy广播

任务描述 本关任务:给定两个不同形状的数组,求出他们的和。 相关知识 广播(Broadcast)是 numpy 对不同形状(shape)的数组,进行数值计算的方式。 对数组的算术运算通常在相应的元素上进行,当运算中的 2 个数组的形状不同时&#xf…

软件设计本质论(Essential Design) —序

软件设计本质论(Essential Design) —序 转载时请注明出处:http://blog.csdn.net/absurd/ 标题可能让人觉得有些自负,这并非出于我的本意。为了避免冒犯一些挑剔的网友,对此我先做一点说明。本质这个词历来与哲学的关系比较紧密,本…

DirectFB代码导读

DirectFB代码导读 转载时请注明出处和作者联系方式作者联系方式&#xff1a;李先静 <xianjimli at hotmail dot com> DirectFB是一个庞大的系统&#xff0c;对它进行彻底分析要花不少时间。幸好多数情况下&#xff0c;只要弄清楚它的基本架构&#xff0c;再重点读一些关…

软件设计本质论(Essential Design) —从链表设计说起

软件设计本质论(Essential Design) —从链表设计说起 转载时请注明出处&#xff1a;http://blog.csdn.net/absurd/ 大师说&#xff0c;软件设计不过是在适当的时候做出适当的决策罢了。对此我深以为然&#xff0c;好的设计就是做出了正确决策。然而&#xff0c;在多种互相竞争的…

wps数据可视化_六大类十四款最全的可视化工具推荐

随着大数据时代的降临&#xff0c;企业和组织对数据的需求发生变化&#xff0c;因此五花八门的可视化工具开始层出不穷。那么面对这么多的可视化工具&#xff0c;不同开发人群应该用一怎样的标准来筛选最适合自己的可视化工具呢?本文将介绍一些不同类型的可视化工具&#xff0…

通过管道与子进程通信

通过管道与子进程通信 转载时请注明出处&#xff1a;http://blog.csdn.net/absurd/ 最近要把mplayer改造成C/S架构的&#xff0c;mplayer比较复杂&#xff0c;为了避免修改mplayer的代码&#xff0c;我决定让mplayer作为Server的子进程来运行&#xff0c;两者之间用管道作为通信…

ios开发 多人语音聊天_后社交时代,语聊直播APP开发是否有前景?

直播行业的兴起让每个普通人都能发掘自身价值&#xff0c;并在虚拟空间内得到极大的发挥&#xff0c;不仅搭建了普通大众之间的新型沟通交往方式&#xff0c;也拓宽了虚拟内容创业渠道。从2016年直播元年至今&#xff0c;各类直播平台爆炸式增长&#xff0c;已衍生出了电商直播…

[open source]点阵字体产生器发布

[open source]点阵字体产生器发布 转载时请注明出处&#xff1a;http://blog.csdn.net/absurd N年以前写的一个点阵字体产生器&#xff0c;主要是给自己用的&#xff0c;花了一天时间就搞定了&#xff0c;后来没有时间整理&#xff0c;代码比较乱&#xff0c;不过还算比较稳定。…