繁体   English   中英

切片 2d numpy 数组

[英]slicing a 2d numpy array

以下代码:

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 shell,它给了我以下 output,这显然是错误的,可能是抛出错误的原因:

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)

在我的代码之上。

我已经工作了太多时间,如果我犯了这些错误,我需要休息一会儿。

您可能是指p.mean(copy[:,1])mean() function 调用之前的索引。 我没有看到copy内容的问题 - 它看起来很适合我。

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM