关键词搜索

源码搜索 ×
×

Python3与线性代数的随笔之初等变换

发布2021-02-26浏览428次

详情内容

初等变换(elementary transformation)是三种基本的变换,即交换(switching),相乘(multiplication)和相加(addition)。

以下是关于实现初等变换的Python3代码,不需c#教程要用numpy和matlib等第三方模块。可能这不是最好,最简单的,但能实现功能,抛砖引玉。

其中程序已定义了一个二维列表变量matrix,并满足矩阵的条件,如matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]

交换:

1 switch_num = input("请输入需要交换的那两行的编号:").split()
2 a, b = int(switch_num[0])-1, int(switch_num[1])-1
3 for num in range(len(matrix[0])):
4     matrix[a][num], matrix[b][num] = matrix[b][num],  matrix[a][num]
 

    相乘:

     1 command = input("按格式:[行编号] [*或/] [乘数或除数]来输入:").split()
     2 row_num, sign, k = int(command[0])-1, command[1], float(command[2])
     3 if k == 0:
     4     raise MathError("Can't be multiplied by a zero constants.")
     5 else:
     6 for num in range(len(matrix[0])):
     7         if sign == "*":
     8             matrix[row_num][num] *= k
     9         elif sign == "/":
    10             matrix[row_num][num] /= k
    
      6
    • 7
    • 8
    • 9
    • 10

    说明一下,第4行我自定义了一个错误。因为规定,做相乘运算时,乘数不可为0,自然除数也不能为0,所以要引发错误来提醒用户。

    自定义的错误:

    1 class MathError(Exception):
    2     def __init__(self, value):
    3         self.value = value
    4 
    5     def __str__(self):
    6         return self.value
     
    
      6
    • 7

    相加:

     1 command = input("按格式:[行编号] [+或-] [系数] [另一个行编号]来输入:").split()
     2 row_num_a, sign, k, row_num_b = int(command[0])-1, command[1], float(command[2]), int(command[3])-1
     3 if row_num_a == row_num_b:
     4     raise MathError("Can't operate in the same row/column.")
     5 else:
     6     for num, item in enumerate(matrix[row_num_b]):
     7         if sign == "+":
     8             matrix[row_num_a][num] += k * item
     9         elif cmd[2] == "-":
    10             matrix[row_num_a][num] -= k * item
    
      6
    • 7
    • 8
    • 9
    • 10

    说明,规定不能对同一行进行加减,若用户输入的两个行编号相同,则引发自定义错误

    以上这些代码都是关于行(row)操作的,那要怎样进行列(column)操作捏?

    那就先转置(transpose)一次矩阵,然后对这个python基础教程转置矩阵进行行操作,再转置回来。即 转置→行操作→转置。

    转置:

    1 matrix = [list(temp) for temp in zip(*matrix)]
    
    • 1

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载