нарезка двумерного массива - PullRequest
1 голос
/ 12 января 2011

Следующий код:

import numpy as p
myarr=[[0,1],[0,6],[0,1],[0,6],[0,1],[0,6],[0,1],[0,6],[0,1],[0,6],[0,1],[0,6],[0,1],[0,6],[0,1],[0,6],[0,1],[0,6]]
copy=p.array(myarr)
p.mean(copy)[:,1]

Генерирует следующее сообщение об ошибке:

Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    p.mean(copy)[:,1]
IndexError: 0-d arrays can only use a single () or a list of newaxes (and a single ...) as an index

Я посмотрел синтаксис по этой ссылке и мне кажется,использовать правильный синтаксис для нарезки.Однако, когда я набираю

copy[:,1]

в оболочке Python, он выдает мне следующий вывод, который явно неверен и, вероятно, вызывает ошибку:

array([1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6])

МожетКто-нибудь покажет мне, как исправить мой код, чтобы я мог извлечь второй столбец, а затем взять среднее значение второго столбца, как и предполагалось в исходном коде выше?

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

Спасибо за ваши решения.Тем не менее, моя публикация была упрощением моей настоящей проблемы.Я использовал ваши решения в своем реальном коде и получил новую ошибку.Вот мой реальный код с одним из ваших решений, которые я попробовал:

    filteredSignalArray=p.array(filteredSignalArray)

    logical=p.logical_and(EndTime-10.0<=matchingTimeArray,matchingTimeArray<=EndTime)
    finalStageTime=matchingTimeArray.compress(logical)
    finalStageFiltered=filteredSignalArray.compress(logical)

    for j in range(len(finalStageTime)):
        if j == 0:
            outputArray=[[finalStageTime[j],finalStageFiltered[j]]]
        else:
            outputArray+=[[finalStageTime[j],finalStageFiltered[j]]]

    print 'outputArray[:,1].mean() is:  ',outputArray[:,1].mean()

А вот сообщение об ошибке, которое теперь генерируется новым кодом:

File "mypath\myscript.py", line 1545, in WriteToOutput10SecondsBeforeTimeMarker
    print 'outputArray[:,1].mean() is:  ',outputArray[:,1].mean()
TypeError: list indices must be integers, not tuple

Второй РЕДАКТИРОВАТЬ:

Это решено теперь, когда я добавил:

    outputArray=p.array(outputArray)

над моим кодом.

Я был на этом слишком много часов, и мне нужносделать перерыв на некоторое время, если я совершаю подобные ошибки.

Ответы [ 2 ]

1 голос
/ 12 января 2011
x = numpy.array(myarr)
x[:,1].mean()

или

numpy.array(myarr)[:,1].mean()

или, если вы действительно ненавидите себя,

numpy.array(myarr).mean(axis=0)[1]

или

float(sum(a[1] for a in myarr))/len(myarr)
1 голос
/ 12 января 2011

Вы, вероятно, имеете в виду p.mean(copy[:,1]) с индексированием перед вызовом функции mean().Я не вижу проблемы с содержимым copy - оно мне подходит.

...