【问题标题】:Python function for creating a square matrix of any size用于创建任意大小的方阵的 Python 函数
【发布时间】:2020-09-21 11:08:44
【问题描述】:

我需要创建一个函数,它可以采用未指定数量的参数(矩阵的元素)并返回相应的方阵。我已经使用以下方法实现了这一点。

def square_matrix(size, *elements):

    numbers = list(elements)
    if size ** 2 != len(numbers):
        return "Number of elements does not match the size of the matrix"
    else:
        matrix = []
        factor = 0
        for i in range(0, size):
            row = []
            for j in range(factor * size, (factor + 1) * size):
                row.append(numbers[j])
            factor += 1
            matrix.append(row)
            i += 1
        return matrix

print(square_matrix(3, 1, 2, 3, 4, 5, 6, 7, 8, 9))
# Output: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

虽然这种方法适用于较小的矩阵,但它似乎有些低效,因为它使用嵌套循环并且对我来说显得不必要的长。有没有更好/更简洁的实现方式?

【问题讨论】:

    标签: python arrays matrix


    【解决方案1】:

    只使用 NumPy 可以吗?

    import numpy as np
    
    def square_matrix(size, *elements):
        return np.array(elements).reshape(size, size)
    

    【讨论】:

    • 是的,没关系,我只是想不出用 NumPy 实现它的方法。
    【解决方案2】:

    对于矩阵创建,您可以使用比 for 循环更有效的列表推导。

    您可以用下面的代码替换 if 语句 else 部分中的 for 循环。

    matrix = [[i for i in elements[j:j+size]] for j in range(0,len(elements),size)]
    

    【讨论】:

      【解决方案3】:

      没有必要将大小作为参数。如果参数长度的平方根是一个整数,那么你可以制作一个元素的方阵。

      import numpy as np
      from math import sqrt
      
      def square_matrix(*elements):
          size = sqrt(len(elements))
          if size.is_integer():
            return np.array(elements).reshape(int(size), int(size))
          else:
            raise RuntimeError("Number of elements is not sufficient to make a square matrix")
      
      
      print(square_matrix(1, 2, 3, 4, 5, 6, 7, 8, 9))
      # Output:
      # array([[1, 2, 3],
      #        [4, 5, 6],
      #        [7, 8, 9]])
      

      【讨论】:

        猜你喜欢
        • 2014-02-03
        • 1970-01-01
        • 1970-01-01
        • 2020-03-20
        • 1970-01-01
        • 1970-01-01
        • 2013-05-09
        • 2016-11-11
        • 1970-01-01
        相关资源
        最近更新 更多