以下代码:
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)
在我的代码之上。
如果我犯了这些错误,我已经过了这么多时间,需要休息一段时间。
答案 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)