另一种方法是使用要作为元素保持在一起的单元来制作对象 dtype 数组:
In [82]: One_ = np.empty(2,object)
In [84]: One_[:] = One.tolist()
In [85]: One_
Out[85]: array([list(['1A1', '1A2']), list(['1B1', '1B2'])], dtype=object)
In [86]: Two_ = np.empty(2,object)
In [87]: Two_[:] = Two.tolist()
现在meshgrid
可以将它们组合起来,就像使用数字或字符串 dtypes 一样:
In [88]: np.meshgrid(One_, Two_)
Out[88]:
[array([[list(['1A1', '1A2']), list(['1B1', '1B2'])],
[list(['1A1', '1A2']), list(['1B1', '1B2'])]], dtype=object),
array([[list(['2A1', '2A2']), list(['2A1', '2A2'])],
[list(['2B1', '2B2']), list(['2B1', '2B2'])]], dtype=object)]
并作为一个数组:
In [89]: np.stack(_)
Out[89]:
array([[[list(['1A1', '1A2']), list(['1B1', '1B2'])],
[list(['1A1', '1A2']), list(['1B1', '1B2'])]],
[[list(['2A1', '2A2']), list(['2A1', '2A2'])],
[list(['2B1', '2B2']), list(['2B1', '2B2'])]]], dtype=object)
并转换回字符串数组:
In [90]: np.array(_.tolist())
Out[90]:
array([[[['1A1', '1A2'],
['1B1', '1B2']],
[['1A1', '1A2'],
['1B1', '1B2']]],
[[['2A1', '2A2'],
['2A1', '2A2']],
[['2B1', '2B2'],
['2B1', '2B2']]]], dtype='<U3')
或者使用结构化数组视图对两个字符串进行分组:
In [92]: One.view([('f0','U3',(2,))])
Out[92]:
array([[(['1A1', '1A2'],)],
[(['1B1', '1B2'],)]], dtype=[('f0', '<U3', (2,))])
In [93]: Two.view([('f0','U3',(2,))])
Out[93]:
array([[(['2A1', '2A2'],)],
[(['2B1', '2B2'],)]], dtype=[('f0', '<U3', (2,))])
In [94]: np.meshgrid(_92, _93)
Out[94]:
[array([[(['1A1', '1A2'],), (['1B1', '1B2'],)],
[(['1A1', '1A2'],), (['1B1', '1B2'],)]],
dtype=[('f0', '<U3', (2,))]),
array([[(['2A1', '2A2'],), (['2A1', '2A2'],)],
[(['2B1', '2B2'],), (['2B1', '2B2'],)]],
dtype=[('f0', '<U3', (2,))])]
In [95]: np.stack(_)
Out[95]:
array([[[(['1A1', '1A2'],), (['1B1', '1B2'],)],
[(['1A1', '1A2'],), (['1B1', '1B2'],)]],
[[(['2A1', '2A2'],), (['2A1', '2A2'],)],
[(['2B1', '2B2'],), (['2B1', '2B2'],)]]],
dtype=[('f0', '<U3', (2,))])
In [96]: import numpy.lib.recfunctions as rf
In [97]: rf.structured_to_unstructured(_95)
Out[97]:
array([[[['1A1', '1A2'],
['1B1', '1B2']],
[['1A1', '1A2'],
['1B1', '1B2']]],
[[['2A1', '2A2'],
['2A1', '2A2']],
[['2B1', '2B2'],
['2B1', '2B2']]]], dtype='<U3')