为了说明我面临的问题,这里有一些示例代码:
a = np.round(np.random.rand(10, 15))
counta = np.count_nonzero(a, axis=-1)
print(counta)
A = np.einsum('im,mj->ijm', a, a.T)
countA = np.count_nonzero(A, axis=-1)
print(countA)
它创建一个2D数组,并沿着最后一个轴对其非零元素进行计数。然后,它创建一个3D数组,其中的非零元素再次沿着最后一个轴计数。
我的问题是我的数组a
太大了,我可以执行第一步,但不能执行第二步,因为A
数组会占用太多内存。
有没有办法得到countA
?也就是说,在不实际创建数组的情况下,沿着给定的轴计算A中的零?
1条答案
按热度按时间dkqlctbz1#
我认为你可以简单地使用矩阵乘法(点积)来得到你的结果,而不需要生成那个庞大的3D数组
A
:这也更快:
还要注意,第一步与第二步是多余的: