Матрица Python, любое решение? - PullRequest
0 голосов
/ 29 апреля 2011

МОЙ ввод (только для примера):

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

Итак, результат этой матрицы.

Есть идеи?


EDIT2:

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

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

Я получил ошибку:

"индексы списка должны быть целыми числами, а не кортежем"

Но если xx = numpy.array([[1, 7], [1.5, 8], [2, 5.5], [2, 9]]), тогда все в порядке, но у меня нет такого ввода.

Ответы [ 2 ]

1 голос
/ 29 апреля 2011

Сначала вы должны создать матрицу, содержащую числа с плавающей запятой вместо строк:

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

Далее вы можете использовать правила вещания NumPy для построения матриц продукта:

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

Наконец, сумма по всем матрицам:

print y.sum(axis=0)

печать

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

Обратите внимание, что это решение позволяет избежать петель Python.

1 голос
/ 29 апреля 2011

Как насчет следующего:

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]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...