What is meant by 2D array support?
我读到Python实际上并不支持2D数组,而是支持数组的数组。 我了解数组中的数组,但是支持2D数组是什么意思?
在C语言中,通过做一些奇特的数学运算即可将2D数组简单地转换为1D数组(见此处)。 有没有实现实际2D数组的语言?
感谢您的帮助,我希望我没有写过重复的问题; 如果是这样,给我一个链接,然后关闭我的问题:)
有些语言实现2D(或3D等)数组。 Fortran是其中之一。这意味着您可以编写像
同样,Numpy是对Python的数字扩展,提供了n维数组。
有人已经提到了
例如。,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | >>> 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维数组的支持"的含义(尽管在大多数其他提供这种支持的语言和框架中,您可能会获得较低的透明度,较低的功能或同时获得这两者;-)。
C#具有多维数组,但建议不要使用它们,因为锯齿状数组(数组的数组)性能更高。
Rosetta Code提供了用于创建二维数组的Python示例。
Python中的实际数组-即
我猜"支持2D数组"意味着该语言如何允许您像访问2D数组一样访问数据。在c中,花式数学被数组构造隐藏:
1 2 | char arr[5][5]; char c = arr[2][3]; |
也有一种方法可以通过指针算术来完成(您可能将其称为幻想数学)。
实际上,内存是一大堆可寻址的数据字节[0,1,2,3,4,5,6 ...内存末尾],因此没有2D数组的"本机"概念,某些地方必须翻译程序员将"行1列2"到内存中的实际地址。编程语言通常为您提供隐藏翻译的方法。
Fortran具有真正的多维数组。此链接在FORTRAN 77案例中讨论它们。