Nop*_*ope 8 c python arrays multidimensional-array
我读到Python实际上并不支持2D数组,而是数组的数组.我理解数组的数组,但支持2D数组是什么意思?
在C中,通过做一些奇特的数学运算(在这里看到),简单地将2D数组转换为1D数组.是否有实现实际2D阵列的语言?
谢谢你的帮助,我希望我没有写一个重复的问题; 如果是这样给我一个链接并关闭我的问题:)
有人已经提到了numpy
,并且OP评论说"它回到了C数组的奇特指针数学" - 这是一个非常简单的实现细节!由于(普通;-)计算机中的底层内存可以看作是一个字节(或单词)数组,当然,任何数据结构都可以在该数组(或其片段)的顶部加上"花式指针数学" " - 双端队列,多维数组,二进制树,你可以命名,底层实现总是可以归结为(就像所有花哨的控制结构归结为机器级的条件和无条件跳转一样,等等). 那是什么?!当然,这些是实现细节. 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]])
>>>
Run Code Online (Sandbox Code Playgroud)
您可以在N维阵列中对数据进行整形,索引,切片和模制,具有高度的灵活性和出色的性能 - 即使知道底层数据块只是一维数组(此处x生成并保持1-D) ,但即使不是这种情况,你仍然可以通过展平来访问底层的1-D阵列).
这就是"支持N维数组"的意思(虽然在大多数其他语言和框架中提供这种支持,你可能会降低透明度,降低功能,或两者兼而有之;-).