[英]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.