如何在这个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))
重要的是一切都保持稳定,因为速度非常重要。
答案 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
时而不在计算中。