初始化转置的numpy数组

时间:2017-07-18 12:09:37

标签: python arrays numpy initialization

我想使用矩阵A的奇异值分解。

如果可能,我会写:

V, S, W.T = np.linalg.svd(A)

但我不能用它的转置来初始化数组。 现在我有两个问题:

  1. 据我了解python内部结构,此问题没有明显的解决方法。因为调用W的属性/方法需要初始化实例。 作为@property属性的构造函数,需要一些东西。

  2. 如果没有明显的解决方法,以下哪个选项更好/更具惯用性。

  3. 选项1:

    V, S, tmp = np.linalg.svd(A)
    W = tmp.T
    

    选项2:

    V, S, W = np.empty(...), np.empty(...), np.empty(...)
    V[:, :], S[:, :], W.T[:, :] = np.linalg.svd(A)
    

1 个答案:

答案 0 :(得分:3)

选项2在我的实验中花费的时间超过50%。它也更难阅读。

选项1很好,但请注意W将是数组tmp的视图。这应该不是问题,除非你做了一件事,比如tmp[0,0] = 0(它也会修改W)。

我会选择

W = np.linalg.svd(A)
W = W.T

tmp版本同时运行(它仍然使W成为视图),但不会创建另一个可以访问相同数据的名称。