numpy数组拆分/分区效率

时间:2014-02-05 14:59:02

标签: arrays numpy multidimensional-array scipy

这似乎是一个简单的问题,但我一直在努力尝试有效地拆分2D数组:

start_time = time.time()
M = np.ones((400,400))

for i in range(10000):
    e = np.array_split(M, 20)
print time.time() - start_time

然而,与使用 Partition 函数在Mathematica中实现的~0.5秒相比,此过程需要约6秒,当数组变得更大时,这可能成为一种负担。我有什么方法可以加快这个过程吗?

1 个答案:

答案 0 :(得分:3)

将数组拆分为不均匀的部分时,

np.array_split可能很有用。在此,e中每个项目的大小相同,因此您只需使用reshape

e = M.reshape(20,-1)

这将非常快,因为它不需要复制数组,只需更改数组的形状属性。

e将是2D NumPy形状数组(20,8000),而不是NumPy数组列表。


In [56]: M = np.ones((400,400))

In [60]: %timeit M.reshape(20,-1)
1000000 loops, best of 3: 447 ns per loop