我需要翻译Matlab代码

indexSelect0 = a.index1==0 & a.index2==wRange;


变成快速的python风格。我的尝试是:

idx1=np.array(np.where(a['index2'][:,0]==wIndex2))
idx=np.array(np.where(a['index1'][:,0]==wIndex1))
indexSelect0 = ma.masked_array(idx,mask=[not (i in idx1[0,:]) for i in idx[0,:]])


但需要一段时间,因为阵列很长(超过5M的样本)。

问题可以表述为:我有一个由不同观察值组成的数据数组。我有2个索引,可以让我知道哪里是什么。但是我找不到结合两个选项来过滤数据的正确方法。

希望清楚。

谢谢你的帮助

最佳答案

对于备份,我找到了答案。感谢Anton指导我使用DataFrame

import pandas as pd
d = {'index1': a['index1'][:,0].squeeze(), 'index2': a['index2'][:,0].squeeze(), 'data': x}
df= pd.DataFrame(data=d)
y = df[(df.index1==wIndex1) & (df.index2==wIndex2)]


因此,我使用pandas模块的DataFrame和布尔运算符对数据进行索引和选择(在此处更多http://pandas.pydata.org/pandas-docs/stable/indexing.html)。它运作良好:可读性强,编码简单且速度更快。

09-25 17:07