Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python函数,用于创建任意大小的方阵_Python_Arrays_Matrix - Fatal编程技术网

Python函数,用于创建任意大小的方阵

Python函数,用于创建任意大小的方阵,python,arrays,matrix,Python,Arrays,Matrix,我需要创建一个函数,该函数可以接受未指定数量的参数(矩阵的元素)并返回相应的平方矩阵。我使用以下方法实现了这一点 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:

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

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]]

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

可以只使用NumPy吗

import numpy as np

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

只使用NumPy可以吗

import numpy as np

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

对于矩阵的创建,您可以使用比For a循环更有效的列表理解

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

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

对于矩阵的创建,您可以使用比For a循环更有效的列表理解

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

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

没有必要将大小作为参数给出。如果参数长度的平方根是一个整数,则可以生成元素的平方矩阵

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]])

没有必要将大小作为参数给出。如果参数长度的平方根是一个整数,则可以生成元素的平方矩阵

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]])

是的,很好,我只是想不出用NumPy实现的方法。是的,很好,我只是想不出用NumPy实现的方法。