找到多维Python数组的维度

And*_*een 11 python arrays dimensions

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

例如,尺寸[[2,3], [4,2], [3,2]]将是[3, 2],而尺寸[[[3,2], [4,5]],[[3,4],[2,3]]]将是[2,2,2].

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

jas*_*son 23

不,没有内置的东西,因为有了这样的"阵列" 1,它可能是锯齿状的,"尺寸"或"形状"的概念根本就没有任何意义.所以,你必须自己写.如果您可以假设所有维度的一致性,您可以按如下方式进行:

dim1 = len(a)
dim2 = len(a[0])
dim3 = len(a[0][0])
.
.
.
Run Code Online (Sandbox Code Playgroud)

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

def dim(a):
    if not type(a) == list:
        return []
    return [len(a)] + dim(a[0])
Run Code Online (Sandbox Code Playgroud)

但是如果您需要这样的东西,您可能需要考虑查看NumPy数组,numpy.ndarray.shape它们可以为您提供所需的内容.

from numpy import array
l = [[2, 3], [4, 2], [3, 2]]
a = array(l)
print a.shape
Run Code Online (Sandbox Code Playgroud)

产量

(3, 2)
Run Code Online (Sandbox Code Playgroud)

1在吓唬引号中,因为你并不真正关注数组,你正在查看列表,列表列表或列表列表....


Ben*_*Ben 9

你可以用numpy做到这一点:

import numpy
l = [[2,3], [4,2], [3,2]]
m = numpy.array(l)
print m.shape
Run Code Online (Sandbox Code Playgroud)

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


Dav*_*nan 6

那不是多维数组。它是一个list. 它恰好包含其他列表。没有什么可以说您的列表不能是:

[[2,3], [4,2], [3,2,4,5,6]]
Run Code Online (Sandbox Code Playgroud)

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

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

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


Arc*_*ain 5

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

def arr_dimen(a):
  return [len(a)]+arr_dimen(a[0]) if(type(a) == list) else []
Run Code Online (Sandbox Code Playgroud)