例如,假设我正在模拟一堆随时间变化的粒子,并且有一个particles使用这些索引调用的多维数组:
a,3用于3d空间)b)c)构造这样的数组更好particles.shape == (a, b, c)还是particles.shape == (c, b, a)?
我对约定更感兴趣而不是效率:Numpy数组可以以C样式(最后一个索引变化最快)或Fortran样式(第一个索引)设置,因此它可以有效地支持这两种设置。我也意识到我可以用来transpose按我需要的任何顺序放置索引,但是我想将其最小化。
我本人开始对此进行研究,并找到了对这两种方式的支持:
Pro-(c,b,a):
inner,cross等)作用于最后一个索引。(dot作用于一个的最后一个和另一个的倒数第二个。)matplotlib收集对象(LineCollection,PolyCollection)期待与过去轴的空间坐标的阵列。Pro-(a,b,c):
meshgrid并mgrid产生一组点,它将把空间轴放在第一位。例如,np.mgrid[0:5,0:5,0:5].shape == (3,5,5,5)。我意识到这些函数主要用于整数数组索引,但是使用它们生成点网格并不少见。matplotlib scatter和plot功能分裂出它们的参数,所以它的不可知的阵列的形状,但ax.plot3d(particles[0], particles[1], particles[2])短于与版本键入particles[..., 0]通常,似乎存在两种不同的约定(可能是由于C和Fortran之间的历史差异),目前尚不清楚Numpy社区中哪个更常见,或更适合我在做什么。