切片2d numpy数组

时间:2011-01-12 01:14:26

标签: python arrays numpy slice matplotlib

以下代码:

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

我查找了语法at this link,我似乎正在使用正确的语法进行切片。但是,当我输入

copy[:,1]

进入Python shell,它给了我以下输出,这显然是错误的,并且可能是抛出错误的原因:

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 个答案:

答案 0 :(得分:1)

您可能在p.mean(copy[:,1])函数调用之前使用索引来表示mean()。我没有看到copy内容的问题 - 它看起来对我来说。

答案 1 :(得分:1)

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)