我用python创建了一个矩阵类:
class MatrixOperation:
...
def create_matrix(self):
some function for creation of matrix.
return matrix
def matrix_vector_multiplication(self, x):
mat = self.create_matrix()
return numpy.dot(mat, x)
:
M = MatrixOperation(...)
x = some set of vector
for i in range(n):
M.matrix_vector_multiplication(x[i])
问题是,对于每次迭代,M.matrix_vector_multiplication(x[i])
将在计算numpy.dot(mat, x)
之前重新计算mat = self.create_matrix()
,这是不必要的(因为它可以在开始计算一次)。我怎样才能避免这种情况呢?
谢谢,
为了避免每次都重新创建矩阵,可以在类的__init__
方法中创建一个实例属性—与此类似。
class Matrix(object):
def __init__(self, data):
self.matrix = self.create_matrix(data)
# or simply
# self.matrix = np.matrix(data)
def create_matrix(data):
# create the_matrix
return the_matrix
def do_something(self, x):
z = some_function(self.matrix, x)
return z
my_matrix = matrix([[1,2,3,4],[4,3,2,1]])
只要复制一个矩阵就可以解决你的问题。
import copy
class MatrixOperation:
matrix = None
...
def create_matrix(self):
if self.matrix is not None:
return copy.copy(self.matrix)
some function for creation of matrix.
self.matrix = matrix
return matrix
def matrix_vector_multiplication(self, x):
mat = self.create_matrix()
return numpy.dot(mat, x)