python类中相同数据的多个表示形式

时间:2018-04-24 17:58:43

标签: python neural-network

我无法访问并为我创建的对象分配新变量。简而言之,我创建了可以容纳多个矩阵(numpy)的对象Theta,我需要以矩阵字典格式以及单行矢量格式访问该对象。

例如,在进行线性代数运算(神经网络应用程序)时,我能够很好地访问各个矩阵并执行操作。但是,最简单的方法是将这些矩阵传递给行向量格式的其他函数。我在类中有另一个函数,它接受一个行向量作为输入并重新生成所有矩阵,为简洁起见,我省略了这些函数。

我的问题是我想通过简单地编辑行向量来访问和分配新值,而不必在指定索引索引的类中编写新函数,然后更新值。简而言之,我有两个相同数据的表示,并希望能够为其中一个表示分配新值,然后另一个表示也会自动更新。

我意识到我可能能够以不同的方式重新设计整个课程以避免这些问题,但总的来说,我认为这可能是一个很好的问题。谢谢!

import numpy as np

class Theta(object):
    def __init__(self, nn_specs, code = 'zeros'):
        self.specs = nn_specs
        self.matrices = {}
        if code == 'zeros':
            Theta.set_zeros(self)
        elif code == 'random':
            print('...setting random theta')
            Theta.set_random(self)

    def set_zeros(self):
        for i in range(len(self.specs)-1):
            self.matrices[i] = np.zeros((self.specs[i+1], (self.specs[i]+1)))

    def set_random(self, eps = 0.1):
        for i in range(len(self.specs)-1):
            self.matrices[i] = (np.random.rand(self.specs[i+1], (self.specs[i]+1)) * 2 * eps) - eps

    def get_flat(self):
        for i_theta in range(len(self.matrices)):
            if i_theta == 0:
                self.flat = self.matrices[i_theta].flatten()
            else:
                self.flat = np.concatenate((self.flat, self.matrices[i_theta].flatten()))
        return self.flat

test_theta = Theta((2,3,1), 'random')

print(test_theta.get_flat())

test_theta.get_flat()[2] = 3
#I AM NEEDING THIS TO CHANGE, with the third value being 3
print(test_theta.get_flat())

0 个答案:

没有答案