<p><code>numpy</code>的<code>array</code>构造函数可以处理任意维数的iterables。它们唯一的规定是它们不能是锯齿状的(即每个维度中的每个“行”必须具有相同的长度)。你知道吗</p>
<p>举个例子:</p>
<pre><code>In [1]: list_3d = [[['a', 'b', 'c'], ['d', 'e', 'f']], [['g', 'h', 'i'], ['j', 'k', 'l']]]
In [2]: import numpy as np
In [3]: np.array(list_3d)
Out[3]:
array([[['a', 'b', 'c'],
['d', 'e', 'f']],
[['g', 'h', 'i'],
['j', 'k', 'l']]], dtype='<U1')
In [4]: array_3d = np.array(list_3d)
In [5]: array_3d[0,0,0]
Out[5]: 'a'
In [6]: array_3d.shape
Out[6]: (2, 2, 3)
</code></pre>
<p>如果数组<em>是锯齿状的,<code>numpy</code>将“挤压”到发生锯齿状的维度。既然这种解释很清楚,举个例子也许会有帮助:</p>
<pre><code>In [20]: jagged_3d = [ [['a', 'b'], ['c', 'd']], [['e', 'f'], ['g', 'h'], ['i', 'j']] ]
In [21]: jagged_arr = np.array(jagged_3d)
In [22]: jagged_arr.shape
Out[22]: (2,)
In [23]: jagged_arr
Out[23]:
array([list([['a', 'b'], ['c', 'd']]),
list([['e', 'f'], ['g', 'h'], ['i', 'j']])], dtype=object)
</code></pre>
<p>构造函数不是开箱即用的原因是您有一个锯齿状数组。<code>numpy</code>根本不支持锯齿数组,因为每个<code>numpy</code>数组都有一个定义良好的<code>shape</code>表示每个维度的长度。因此,如果给定维度中的项的长度不同,那么这种抽象就会分崩离析,<code>numpy</code>根本不允许这样做。你知道吗</p>
<p>嗯。你知道吗</p>