如何避免在numpy中循环

时间:2016-02-24 08:39:26

标签: numpy

如何在这个numpy操作中避免for循环并创建一个单独的数组作为输出,如下所示:

import numpy as np
c=(np.random.rand(12,5)*12).round()
for n in np.arange(12):
    print (np.sum(c==n, axis=1))

重要的是一切都保持稳定,因为速度非常重要。

2 个答案:

答案 0 :(得分:3)

你可以通过将[0..12 [范围变成广播到正确输出的形状来避免for循环:

import numpy as np

c = (np.random.rand(12, 5) * 12).round()

a = np.arange(12).reshape(12, 1, 1)
out = np.sum(c==a, axis=-1)
print(out)

请注意c==a创建一个形状为(12, 12, 5)的临时布尔数组。如果记忆存在问题,请记住这一点。

答案 1 :(得分:-1)

尝试:

import numpy as np
c = (np.random.rand(12 ,5) * 12).round()
arange_nd = np.empty((12, 12, 5))
for i in range(12):
    arange_nd[i] = np.ones((12, 5)) * i
output = (c == arange_nd).sum(axis=2)

数组output是您的打印结果

For循环仅在创建数组arange_nd时而不在计算中。