这似乎是一个简单的问题,但我一直在努力尝试有效地拆分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秒,当数组变得更大时,这可能成为一种负担。我有什么方法可以加快这个过程吗?
答案 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