切片二维numpy数组
以下代码:
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
里的内容没有问题,看起来是对的。