简短版本: 我正在寻找一种有效的方法:
my_data = big_data[big_data[:, 1] == p_num, 2:]
长版: 我正在处理非常大的文件。 首先,我将其中一个读成一个numpy数组“数据” 然后我想使用多处理,以避免多次交流, 我使用了多处理.Array:
data_shared = Array(ctypes.c_double, data.size)
big_data = np.frombuffer(data_shared.get_obj())
big_data = data
稍后,我有一个函数,所有进程都执行以提取感兴趣的数据:
def extract(p_num):
global big_data
my_data = big_data[big_data[:, 1] == p_num, 2:]
return my_data
之后我在my_data上进行了大量的计算,其中一部分是在fortran中使用f2py,所以我真的需要提取这些数据,并且不能使用掩码或类似的东西。
问题是这个提取函数很长。
我尝试使用f2py或cython但没有成功,所以我问你。
答案 0 :(得分:0)
在Python中处理非常大的数据集时,我已经使用HDF5(例如h5py或pytables)与numpy / scipy结合使用。因此,我建议采用以下方法。
最后,如果代码仍然计算效率低下,您可能需要重新设计 - 或切换到C或其他高效的编译语言。
答案 1 :(得分:0)
最后,我通过在fortran中重新排序我的大数组来解决我的问题。 所以现在我:
在我的情况下,此解决方案效率更高。