这似乎是一个相当基本的问题,但我没有找到任何相关的堆栈。抱歉,如果我错过了一个现有的问题。你知道吗
我已经看到了一些数学/线性代数的原因,为什么人们可能希望使用numpy向量“正确”(即ndim1),而不是行/列向量(即ndim2)。你知道吗
但现在我想知道:有没有什么(重要的)效率原因可以让一个选择另一个?还是在这方面的选择相当武断?你知道吗
(编辑)澄清:我所说的“ndim 1 vs ndim 2 vectors”是指将一个包含数字3和4的向量表示为:
你知道吗np.数组([3,4])#ndim 1
你知道吗np.数组([[3,4]])#ndim 2
numpy文档似乎倾向于将第一种情况作为默认情况,但正如我所说的,我想知道是否有性能上的差异。你知道吗
如果你正确使用numpy,那么不-这不是一个考虑因素。你知道吗
如果你看numpy internals documentation,你可以看到
因此,不管数组的大小,所有数据都存储在一个连续的缓冲区中。现在考虑一下
以及
访问
a[1]
所需的操作确实比b[1, 1]
少(因为1, 1
到平面索引的转换需要一些计算),但是,为了获得高性能,仍然需要vectorized operations。你知道吗如果要对数组中的所有元素求和,那么在这两种情况下,都将使用相同的方法:
a.sum()
和b.sum()
,并且求和将覆盖连续内存中的元素。相反,如果数据本身是2d的,那么可以执行b.sum(axis=1)
之类的操作来对行求和。在1d阵列中自己这样做容易出错,而且效率不高。你知道吗因此,基本上一个二维数组,如果它是自然的问题只是提供了更大的功能,零或可以忽略不计的开销。你知道吗
相关问题 更多 >
编程相关推荐