2013-06-26 2 views
1

У меня есть код matlab, который я пытаюсь перевести на python. Я новичок в python, но я смог ответить на множество вопросов, связанных с поиском. Но теперь я пытаюсь выяснить следующее: У меня есть цикл for, когда я применяю разные вещи для каждого столбца, но вы не знаете числа столбцов. Например. В MATLAB, ничего проще, чем это:неизвестный размер вектора python

for n = 1:size(x,2); y(n) = mean(x(:,n)); end 

Но я понятия не имею, как это сделать на питона, когда, например, число столбцов равно 1, потому что я не могу сделать х [:, 1 ] в python. Любая идея?

Thanx

ответ

1

numpy Попробуйте. Это привязки python для высокопроизводительной математической библиотеки, написанной на C. Я считаю, что она имеет те же самые понятия операций с матричными срезами, и она значительно быстрее, чем тот же код, написанный на чистом python (в большинстве случаев).

Что касается вашего примера, я думаю, что ближайшим будет что-то, используя numpy.mean.

В чистом питоне это трудно вычислить средний столбец, но вы можете транспонировать матрицу вы могли бы сделать это с помощью что-то вроде этого:

# there are no builtin avg function 
def avg(lst): 
    return sum(lst)/len(lst) 

rows = list(avg(row) for row in a) 
+0

Спасибо. mean() был только примером. Но для основного вопроса я уже использую numpy, но если я создаю массив, например x = array ([1,2,3,4]), я не могу выполнить x [,, 1]. Это не имеет смысла для этого случая, но это всего лишь пример. – tete

+0

@tete ['numpy.matrix'] (http://docs.scipy.org/doc/numpy/reference/generated/numpy.matrix.html) должен сделать это – J0HN

+0

@tete' numpy' * does * support 'x [:, 1] '; проверьте это. – user4815162342

2

Да, если вы используете NumPy вы можете использовать x [:, 1], а также вы получаете другие структуры данных (векторы вместо списков), основное различие между matlab и numpy заключается в том, что Matlab использует матрицы для вычислений, а numpy использует векторы, но вы привыкнете к этому, я думаю, this guide поможет вам.

1

это один из способов сделать это

from numpy import * 
x=matrix([[1,2,3],[2,3,4]]) 
[mean(x[:,n]) for n in range(shape(x)[1])] 

# [1.5, 2.5, 3.5]