我想执行以下Matlab代码:
indexes=find(data>0.5);
data2=data(indexes(1):indexes(length(indexes))+1);
在Python中,所以我这样做了:
indexes=[x for x in data if x>0.5]
init=indexes[1]
print(indexes)
end=indexes[len(indexes)]+1
data2=data[init:end]
但我收到此错误:
end = indexes [len(indexes)] + 1 IndexError:列表索引超出范围
我认为Python中的索引可能与Matlab中的索引不同?
答案 0 :(得分:2)
您的列表理解不是建立索引列表,而是建立项目本身的列表。您应该使用enumerate
在项目旁边生成索引:
ind = [i for i, x in enumerate(data) if x > 0.5]
切片时不必太冗长:
data2 = data[ind[0]: ind[-1]+1] # Matlab's index 1 is Python's index 0
使用len(ind)
为索引列表建立索引将为IndexError
,因为Python中的索引从0开始(与Matlab不同),并且最后一个索引应使用ind[len(ind)-1]
或简单地{{ 1}}。
答案 1 :(得分:0)
len(indexes)
将为您提供列表最后一个元素的索引,因此值加1不在列表范围内。
您似乎正在尝试查找列表中具有大于0.5的值的索引,并将这些值放入data2
中。这更适合于numpy数组。
import numpy as np
data2 = data[data > 0.5]