找到多维Python数组的维度

时间:2013-07-08 16:40:45

标签: python arrays dimensions

在Python中,是否可以编写一个返回多维数组维度的函数(假设数组的维度没有锯齿状)?

例如,[[2,3], [4,2], [3,2]]的维度为[3, 2],而[[[3,2], [4,5]],[[3,4],[2,3]]]的维度为[2,2,2]

Python是否有任何内置函数可以返回多维数组的所有维度,或者我是否需要自己实现此函数?

4 个答案:

答案 0 :(得分:22)

不,没有任何内置因为这样的“数组” 1 它可能是锯齿状的,“尺寸”或“形状”的概念根本没有任何意义。所以,你必须自己写。如果您可以假设所有维度的一致性,您可以按以下步骤进行:

dim1 = len(a)
dim2 = len(a[0])
dim3 = len(a[0][0])
.
.
.

使这个递归处理所有维度非常容易。这应该这样做:

def dim(a):
    if not type(a) == list:
        return []
    return [len(a)] + dim(a[0])

但是如果你需要这样的东西,你可能需要考虑查看NumPy数组numpy.ndarray.shape,这些数组可以为你提供你想要的东西。

from numpy import array
l = [[2, 3], [4, 2], [3, 2]]
a = array(l)
print a.shape

输出

(3, 2)

1 在吓唬报价中,因为你并没有真正关注数组,你正在查看列表,列表列表或列表列表.... / p>

答案 1 :(得分:7)

你可以用numpy做到这一点:

import numpy
l = [[2,3], [4,2], [3,2]]
m = numpy.array(l)
print m.shape

但你的第二个例子的形状是[2,2,2],而不是[1,4,5],除非我误解了你的问题......

答案 2 :(得分:4)

这不是一个多维数组。这是list。它碰巧包含其他列表。没有什么可说的,你的名单不可能是:

[[2,3], [4,2], [3,2,4,5,6]]

在这种情况下,您期望这样的函数返回什么值?

没有一般功能可以满足您的要求,尤其是因为Python本身没有定义矩阵/数组类。您当然可以编写自己的函数,如果您准备对列表的一致性做出假设或编写断言,则可以对列表和元组之类的可迭代对象进行操作。第一个维度使用len(a),第二个维度使用len(a[0]),依此类推。递归将是你的朋友。

如果你的矩阵使用了numpy数组,说实话会很有意义,那么你的函数就会存在(它是ndarray类的shape属性)并且有意义。

答案 3 :(得分:2)

假设输入数组没有锯齿状:

def arr_dimen(a):
  return [len(a)]+arr_dimen(a[0]) if(type(a) == list) else []