CSV для матрицы в Scipy - PullRequest
       16

CSV для матрицы в Scipy

0 голосов
/ 15 ноября 2010

Я не могу заставить простые матричные операции работать с данными, при жизни я не смог понять, что я делаю неправильно:

data = np.genfromtxt(dataset1, names=True, delimiter=",", dtype=float)

X = np.matrix(data)
print(X.T*X)

Traceback (most recent call last):
  File "genfromtxt.py", line 11, in <module>
    print(X.T*X)
  File "/usr/lib/pymodules/python2.6/numpy/matrixlib/defmatrix.py", line 319, in __mul__
    return N.dot(self, asmatrix(other))
TypeError: can't multiply sequence by non-int of type 'tuple'

печать (данные) дает:

[ (3.0, 32.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 9.0, 0.0, 5.5606799999999996, 9.0)
 (4.0, 43.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 9.0, 0.0, 5.7203099999999996, 16.0)
 (5.0, 40.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 9.0, 0.0, 5.9964500000000003, 25.0)
 ...,
 (5.0, 50.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 12.0, 0.0, 6.2146100000000004, 25.0)
 (6.0, 50.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 12.0, 0.0, 6.2915700000000001, 36.0)
 (7.0, 50.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 12.0, 0.0, 6.3716100000000004, 49.0)]

РЕДАКТИРОВАТЬ:

Далее этот код

reader = csv.reader(open(dataset1, 'r'))
header = reader.next()
X = np.array([[float(col) for col in row] for row in reader])

print(X.shape)
print(X.T.shape)
print(X * X.T)

дает этот вывод:

(4165, 13)
(13, 4165)
Traceback (most recent call last):
  File "genfromtxt.py", line 17, in <module>
    print(X * X.T)
ValueError: shape mismatch: objects cannot be broadcast to a single shape
>>> 

Ответы [ 2 ]

3 голосов
/ 15 ноября 2010

Проблема со вторым примером, по-видимому, заключается в том, что оператор * выполняет поэлементное умножение для массивов NumPy.Предположительно, вы хотели бы выполнить умножение матриц.Для этого есть два варианта:

  1. Использовать numpy.matrix вместо numpy.array - тогда умножение будет умножением матрицы, а умножения на целые показатели будут работать, как и ожидалось.

  2. Используйте numpy.dot(A, B) вместо A*B - это будет выполнять умножение матриц как для массивов, так и для матриц.

0 голосов
/ 16 ноября 2010

Эй, Если у вас есть опыт работы с Matlab и / или Octave, эта страница дает несколько полезных советов: http://www.scipy.org/NumPy_for_Matlab_Users

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...