切片二维numpy数组

1 投票
2 回答
3432 浏览
提问于 2025-04-16 09:48

以下代码:

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

我在这个链接上查了语法 ,看起来我在切片时使用的语法是正确的。 但是,当我在 Python 终端输入

copy[:,1]

时,它给出的输出显然是错误的,这可能就是导致错误的原因:

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
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

你可能是想说在调用 mean() 函数之前,先用 copy[:,1] 来选择数据。我觉得 copy 里的内容没有问题,看起来是对的。

撰写回答