使用此元组列表,可以生成3种数组:In [420]: a = [(1,2),(3,4)]
2d数组,从输入中推断出dtype(但也可以指定为类似float的类型)。输入大小匹配。在
^{pr2}$
结构化数组。1d和2个字段。按名称编制字段索引。输入必须是元组列表(不是列表列表):In [422]: np.array(a, dtype='i,i')
Out[422]:
array([(1, 2), (3, 4)],
dtype=[('f0', '
In [423]: _['f0']
Out[423]: array([1, 3], dtype=int32)
在结构化数组中,input和display使用元组,但是数据实际上不是作为元组存储的。这些值打包为字节—在本例中,8个字节代表2个整数。在
对象数组。这是包含元组内容的1d。内容可以是其他任何东西。这是一个增强/降低的列表。在In [424]: A = np.empty((2,), dtype=object)
In [425]: A[:] = a
In [426]: A
Out[426]: array([(1, 2), (3, 4)], dtype=object)
In [427]: A.shape
Out[427]: (2,)
In [428]: A[1]
Out[428]: (3, 4)
Out[428]是一个实际的元组。试图修改它,A[1][0]=30,会引发一个错误。在
在最后一个例子中,A = np.empty(2, dtype=tuple)也做了同样的事情。除integer、float、string等以外的任何东西都“转换”为“object”。在
简单地指定object dtype是没有帮助的。结果是二维的数值元素(但存储为对象指针)。在In [429]: np.array(a, dtype=object)
Out[429]:
array([[1, 2],
[3, 4]], dtype=object)
In [430]: _.shape
Out[430]: (2, 2)
有关在处生成对象dtype数组的详细信息