【问题标题】:Initialising a matrix of zeros using an existing function使用现有函数初始化零矩阵
【发布时间】:2021-03-13 11:30:31
【问题描述】:

我有这个代码:

def initialise(m, n, value):
    if not m <= 0:
        stop_program(f'{m} is not a valid number of lines')
    if not n <= 0:
        stop_program(f'{n} is not a valid number of columns)
    if not is_number(value):
        stop_program(f'{value} is not a valid number')
    return [[value for _ in range(n)] for _ in range(m)]

而 is_number 是一个验证输入的值是否为数字的函数,而 stop_program 是一个在输入的值不是有效数字时停止编程的函数。最后一段代码创建了一个矩阵 mxn,它只包含数字“值”。

现在使用函数初始化,我必须创建一个零矩阵,但我不知道如何。到目前为止,我尝试使用 for 条件,但我不知道在该条件中添加什么来创建一行零和一列零:

def zeros(m, n):
    for init(m):
        #condition and create a column of zeros
    for init(n):
        #condition and create a line of zeros
return []

谢谢!

【问题讨论】:

  • 请使用完整的错误回溯更新您的问题。
  • 您的意思是:def zeros(m, n): return initialise(m, n, 0)

标签: python python-3.x function for-loop


【解决方案1】:

最传统的方式是用numpy:

def initialise(m, n, value):
    if not m <= 0:
        stop_program(f'{m} is not a valid number of lines')
    if not n <= 0:
        stop_program(f'{n} is not a valid number of columns)
    if not is_number(value):
        stop_program(f'{value} is not a valid number')
    return np.zeros(m, n)

如果您只想使用内置功能:

def initialise(m, n, value):
    if m <= 0:
            stop_program(f'{m} is not a valid number of lines')
    elif n <= 0:
            stop_program(f'{n} is not a valid number of columns)
    elif not is_number(value):
        stop_program(f'{value} is not a valid number')
    else:
        zero_mat = []
        for i in range(m):
            zero_row = []
            for _ in range(n):
                zero_row.append(value)
            zero_mat.append(zero_row)
        return zero_mat

在这里,如果您输入零作为值,您将得到预期的结果。 Bur 您也可以使用任何其他值,这似乎是您的真实意图。

【讨论】:

    【解决方案2】:

    只是:

    def zeros(m, n):
        return initialize(m, n, 0)
    

    备注:

    • 如果您不想自己重新实现矩阵操作,我建议您查看numpy 包。您可以使用它来执行 zeors_matrix = np.zeros((2, 3)) 之类的操作,以获得 2x3 零矩阵。
    • return [] 将始终返回一个空列表。

    【讨论】:

      【解决方案3】:

      请注意 for 关键字循环遍历元素,如果您想检查条件,请使用 if else 语句。

      有几种方法可以创建一个零数组:

      使用循环:

      row = []
      for _ in range(10):
         row.append(0)
      
      # output
      [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
      
      col = []
      for _ in range(10):
          col.append([0])
      
      # output 
      [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]]
      

      作为列表理解:

      row = [0 for _ in range(10)]
      
      # output
      [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
      

      或者通过使用其他包,例如numpy

      import numpy as np 
      matrix = np.zeros((3, 2))
      
      # Output
      array([[0., 0.],
             [0., 0.],
             [0., 0.]])
      

      【讨论】:

        【解决方案4】:

        使用list comprehension,您的zeros 函数可能如下所示:

        def zeros(m, n, value=0):
            return [[[0] for _ in range(m)] for _ in range(n)]
        zeros(3, 3, 0)
        

        输出:

        [[[0], [0], [0]], [[0], [0], [0]], [[0], [0], [0]]]
        

        【讨论】:

          【解决方案5】:

          您可以按如下方式创建一个零矩阵:

          zero_matrix = [[0]*m]*n

          其中m 是列数,n 是行数。或者,您可以使用 numpy 中的 zeros 函数

          from numpy import zeros
          
          zero_matrix = zeros(n,m)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-06-13
            • 1970-01-01
            相关资源
            最近更新 更多