我的输入(仅举例):
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+.... ]
结果是这个矩阵。
有什么想法吗?
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]])
那么它没关系,但我没有这样的输入。
答案 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循环。