【问题标题】:Python matrix, any solution?Python矩阵,有什么解决方案吗?
【发布时间】:2011-08-15 16:31:21
【问题描述】:

我的输入(仅举例):

from numpy import * 

x=[['1' '7']
 ['1.5' '8']
 ['2' '5.5']
 ['2' '9']]

我想在随机矩阵上做下一件事情:

1.为每一行计算:

> for example first row:    [1;7]*[1,7] = [[1,  7];      #value * value.transpose
                                          [7,  49]]

> for example second row:   [1.5;8]*[1.5,8]=  [[2.25, 12];
                                               [12,  64]]
 >.......

使用 numpy 很简单,因为转置只是 x.T,如果 x=[1,7] 这必须为矩阵上的每一行计算!

2。现在我想这样总结...

[1+2.25+...         7+12+......  ]
[                                ]           
[7+12+....          49+64+....   ]

所以结果就是这个矩阵。

有什么想法吗?


编辑2:

x=[['1','7']
 ['1.5', '8']
 ['2', '5.5']
 ['2','9']]

y = x[:, :, None] * x[:, None]
print y.sum(axis=0)

我收到错误:

"列表索引必须是整数,而不是 元组”

但如果 x 是 x = numpy.array([[1, 7], [1.5, 8], [2, 5.5], [2, 9]]) 则没关系,但我没有这样的输入。

【问题讨论】:

  • 只需添加矩阵?
  • 您确定要将x 设为字符串 的数组吗?

标签: python matrix numpy sum


【解决方案1】:

以下内容如何:

In [1]: import numpy as np

In [2]: x=np.array([[1, 7],[1.5, 8],[2, 5.5],[2, 9]])

In [3]: np.sum(np.outer(row,row) for row in x)
Out[3]: 
array([[  11.25,   48.  ],
       [  48.  ,  224.25]])

【讨论】:

    【解决方案2】:

    首先,您应该创建包含浮点数而不是字符串的矩阵:

    x = numpy.array([[1, 7], [1.5, 8], [2, 5.5], [2, 9]])
    

    接下来,您可以使用 NumPy 的 broadcasting rules 构建产品矩阵:

    y = x[:, :, None] * x[:, None]
    

    最后,对所有矩阵求和:

    print y.sum(axis=0)
    

    打印

    [[  11.25   48.  ]
     [  48.    224.25]]
    

    请注意,此解决方案避免了任何 Python 循环。

    【讨论】:

    • 嗯,这对我来说是完美的;但我的输入是: x=[['1' '7'] ['1.5' '8'] ['2' '5.5'] ['2' '9']] 如何为此实现您的代码?我尝试使用数组,但没有成功...
    • @thaking:为什么你的矩阵包含字符串?通常,您应该以从一开始就有一个浮点数矩阵的方式对其进行初始化。如果由于某种原因无法实现,您可以使用x = x.astype(float) 转换矩阵。 (请注意,我无法想象有任何必要这样做的理由。)
    • 请查看我的 EDIT 2,我在其中描述了输入数据的问题......以及为什么我无法获取矩阵......谢谢
    • @thaking:这似乎是一个相当不相关的问题。您可能想为此提出一个新问题。请务必在新问题中解释您的“原始输入”来自何处。
    • @thaking:正如我的帖子中所述,您应该将矩阵初始化为 NumPy 浮点数组,而不是像在编辑中所做的那样,像 字符串列表。 NumPy 数组和 Python 列表是非常不同的数据类型,您正在尝试对它们使用相同的代码。
    猜你喜欢
    • 2020-04-09
    • 2020-01-16
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 2014-11-14
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    相关资源
    最近更新 更多