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实现的方法。