Class python in loop



我用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)

最新更新