使用numpy获得子矩阵

2024-05-14 06:36:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用numpy(这里是python新手)执行以下操作

创建rigth维度的零矩阵

num_rows = 80
num_cols = 23
A = numpy.zeros(shape=(num_rows, num_cols))

对矩阵运算

k = 5
numpy.transpose(A)
U,s,V = linalg.svd(A)

提取子矩阵

 sk = s[0:(k-1), 0:(k-1)]

误差结果

Traceback (most recent call last):
File "tdm2svd.py", line 40, in <module>
sk = s[0:(k-1), 0:(k-1)]
IndexError: too many indices

我做错什么了?


Tags: numpyzeros矩阵numrows误差sksvd
1条回答
网友
1楼 · 发布于 2024-05-14 06:36:03

回答你的问题只是一个一维数组。。。(即使你真的调换了它。。。但你没有)

>>> u,s,v = linalg.svd(A)
>>> s
array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])
>>>

用于选择子矩阵 我想这是你想要的。。。也许有更好的办法

>>> rows = range(10,15)
>>> cols = range(5,8)
>>> A[rows][:,cols]
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])

或者更好

>>> A[15:32, 2:7]
array([[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]])

相关问题 更多 >