如何在 python 中打印具有特定图案的矩阵

How to print a matrix with a certain pattern in python

我们如何使用 Python 创建一个模式,这将创建一个方形矩阵,它将对角线元素的值设为零,更改对角线元素 29 以上的元素的值,并更改对角线以下元素的值等于 5.

例如:


Input: 4

Output:

0999
5099
5509
5550

请帮忙。谢谢

尝试使用 numpy 库。

import numpy as np

np.identity(4) # This will print out 1 on the diagnoals and 0 on the rest.

之后只需使用循环将所有 1(诊断)更改为 0 然后使用 if 语句和循环来识别数字是否大于 0

或者,如果您只想使用带有预定义列表的矩阵,则只需使用 np.array(list)

您需要检查 、对角线 (row_index == column_index)、上三角矩阵 (column_index > row_index) 和 [=17= 的条件] 矩阵 (row_index > column_index) 然后相应地添加值

def func(n):
    l = []
    for i in range(n):
        tmp = []
        for j in range(n):
            if j==i:
                tmp.append(0)
            elif j>i:
                tmp.append(9)
            elif j<n:
                tmp.append(5)
        l.append(tmp)
    return l

要搜索的关键词是“上三角”和“下三角”。完成后,我们可以像这样组成所需的输出:

import numpy as np

shape = (4, 4)
np.tril(np.full(shape, 5), -1) + np.triu(np.full(shape, 9), 1)

这是如何工作的:

  • np.full(shape, fill_value) 构造一个给定形状的数组,用给定的数字填充。
  • np.tril(m, k) returns 矩阵 m 的下三角,从第 k 对角线开始(其余为零)。
  • 类似地,np.triu(m, k) returns 矩阵 m 的上三角,从第 k 对角线开始(其余为零)。

如果只是打印的话,可以试试下面的

for i in range(n):
    for j in range(n):
        # diagonal case
        if i == j:
            print(0, end='')
        # upper diagonal case
        elif i < j:
            print(9, end='')
        # lower diagonal case
        else:
            print(5, end='')
    print('')

我认为这应该可以解决问题

def pattern(size):
    for i in range(size):
        print('5'*i + '0' + '9'*(size-i-1))
        
pattern(4)