matlab使用python返回数组_Python:相当于Matlab的大型数组的svds(A,k)?

我正在尝试将一些代码从Matlab移植到Python,我遇到了一个问题.我似乎无法找到相当于svds.

我尝试使用numpy.corrcoef然后numpy.linalg.eig,但numpy.corrcoef不适用于大型数组(比如500 x 20000).

这是matlab中的代码,如果它有任何区别:

s = size(data, 2)

mean = sum(data, 2)/s

m_data = ( data - repmat(mean, 1, s) ) / sqrt(s - 1)

[res_u,res_s] = svds(m_data, s)

eigenvals = diag(res_s).^2

eigenvecs = res_u

解决方法:

那么你在寻找什么,在python和numpy中会是这样的(我冒昧地不把’matlab-code’直接翻译成python和numpy,而是重构了一点”感觉’更pythonic [ of’course非常相似的重构也可以应用于matlab代码]):

import numpy as np

def _cas(D):

"""Center at mean and standardize."""

return (D- D.mean(1)[:, None])/ (D.shape[1]- 1)** .5

def example(D):

"""Eigenvalues and -vectors, based on SVD."""

u, s, v= np.linalg.svd(D, full_matrices= False);

return np.diag(s)** 2, u

if __name__ == '__main__':

data= np.random.rand(5, 20)

data= _cas(data) # preprocess data according to your requirements

eigenvals, eigenvecs= example(data)

print eigenvals

print eigenvecs

但是你有性能问题吗?

你现在可以更具体地了解你目前的表现吗,你真正期望它应该加强多少? FTIW在我的适度计算机中,随机(500,20000)矩阵将花费大约20秒执行示例(.).

我可以琐碎(由于基本的线性代数)将执行时间缩短到2.5秒(最多10倍的改进)!现在,如果您正在寻找比这更好的性能,那么请详细说明数据的“性质”!

您的数据来自哪里?您使用计算的特征值和-vectors的具体情况是什么?即你的主要目标是什么?

标签:python,matlab

来源: https://codeday.me/bug/20190521/1149155.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值