有人已经提到了numpy,并且 OP 评论说“它回到了 C 数组的花哨的指针数学”——这是一个完全微不足道的实现细节!由于(普通;-)计算机中的底层内存可以看作是一个字节(或单词)数组,那么当然任何数据结构whatsoever都是在该数组(或其切片)的顶部加上“花哨的指针数学”——双端队列、多维数组、二叉树,你的名字,底层实现总是归结为那个(就像所有花哨的控制结构一样归结为机器级别的条件和无条件跳转,等等)。 那又怎样?!当然,这些是实现细节。 numpy,就像 Fortran 和其他语言和库一样,提供 N 维数组——无论它如何“深入地”实现它们(实际上 numpy 很早,因为你可以轻松地展平和重塑数组——它是非常典型的 Python 提供更高级别的抽象,并在它们与低级抽象的关系方面提供了很好的“钩子”;-)。
例如,
>>> import numpy
>>> x = numpy.arange(12)
>>> x
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
>>> x.reshape((3,4))
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> x.reshape((4,3))
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
>>> x.reshape((4,3))[::2, ::2]
array([[0, 2],
[6, 8]])
>>> x.reshape((4,3))[(0,1,3), ::2]
array([[ 0, 2],
[ 3, 5],
[ 9, 11]])
>>>
您可以对 N 维数组中的数据进行整形、索引、切片和模塑,具有很高的灵活性和出色的性能——即使知道底层数据块只是那个一维数组(这里 x 诞生并保留)一维,但即使不是这种情况,您也可以仍然通过展平访问底层的一维数组。
这就是“对 N 维数组的支持”的意思(尽管在大多数其他提供此类支持的语言和框架中,您可能会获得较低的透明度、较低的功能,或两者兼而有之;-)。 p>