我想使用矩阵A
的奇异值分解。你知道吗
如果可能的话,我会写:
V, S, W.T = np.linalg.svd(A)
但我不能用它的转置来初始化数组。 现在我有两个问题:
据我所知,python内部没有明显的解决方法。因为调用W
的属性/方法需要初始化实例。
我们需要一些构造函数作为@property
属性。
如果没有明显的解决方法,那么以下哪个选项更好/更惯用。
方案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)
选项2在我的实验中花费了超过50%的时间。它也更难阅读。你知道吗
选项1很好,但是请注意
W
将是数组tmp
的视图。这应该不是一个问题,除非你做了一些使之成为问题的事情,比如tmp[0,0] = 0
(它也修改了W
)。你知道吗我会和你一起去
它与使用
tmp
的版本同时运行(并且它仍然使W成为一个视图),但不会创建另一个名称来访问相同的数据。你知道吗相关问题 更多 >
编程相关推荐