Python矩阵,任何解决方案?

时间:2011-04-29 17:58:31

标签: python matrix numpy sum

我的输入(仅举例):

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 = [1,7],转置只是x.T 必须为矩阵上的每一行计算!

2。现在我想以这种方式求和......

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

结果是这个矩阵。

有什么想法吗?


EDIT2:

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]])那么它没关系,但我没有这样的输入。

2 个答案:

答案 0 :(得分: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]])

答案 1 :(得分:1)

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

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循环。