python - 使用 numpy 获取子矩阵

标签 python numpy

我正在尝试使用 numpy(此处为 python 新手)执行以下操作

创建一个维数为零的矩阵

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

我做错了什么?

最佳答案

回答你的问题 s 只是一个一维数组......(即使你确实转置了它......你没有)

>>> 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.]])

关于python - 使用 numpy 获取子矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13737109/

相关文章:

python - 如何计算数组中每个值的公式?

python - Pandas 数据框 : columns with long names

python - 从任务访问 Django DB

python - 如何强制 matplotlib 更新绘图

python - PCA——使用 Numpy 计算减小尺寸的矩阵

python - 根据条件将 numpy 数组值设置为 NaN

python - Scrapy( python )TypeError : unhashable type: 'list'

python - Pandas DataFrame 分组

python - 使用 OpenCv python 库从内存中读取 base 64 编码图像

python - 使用条件连接 NumPy 数组