为了账号安全,请及时绑定邮箱和手机立即绑定

使用包含数组的单个结构化元素创建数组

使用包含数组的单个结构化元素创建数组

aluckdog 2023-10-06 13:44:24
我有一个像这样的数据类型:>>> dt = np.dtype([('x', object, 3)])>>> dtdtype([('x', 'O', (3,))])一个名为“x”的字段,包含三个指针。我想用这种类型的单个元素构造一个数组:>>> a = np.array([(['a', 'b', 'c'])], dtype=dt)>>> b = np.array([(np.array(['a', 'b', 'c'], dtype=object))], dtype=dt)>>> c = np.array((['a', 'b', 'c']), dtype=dt)>>> d = np.array(['a', 'b', 'c'], dtype=dt)>>> e = np.array([([['a', 'b', 'c']])], dtype=dt)所有这五个语句都会产生相同的错误结果:array([[(['a', 'a', 'a'],), (['b', 'b', 'b'],), (['c', 'c', 'c'],)]],      dtype=[('x', 'O', (3,))])如果我尝试删除内部列表/数组,则会收到错误:>>> f = np.array([('a', 'b', 'c')], dtype=dt)ValueError: could not assign tuple of length 3 to structure with 1 fields.同样的错误发生在>>> g = np.array(('a', 'b', 'c'), dtype=dt)我已经用完了所有可能的组合来尝试。我正在寻找的结果是 array([(['a', 'b', 'c'],)], dtype=[('x', 'O', (3,))])如何创建一个包含指定数据类型的一个元素的数组?到目前为止,我发现的唯一方法是手动分配:z = np.empty(1, dtype=dt)z['x'][0, :] = ['a', 'b', 'c']或者z[0]['x'] = ['a', 'b', 'c']np.array对于应该能够开箱即用的东西来说,这似乎是一个不必要的解决方法。
查看完整描述

1 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

In [44]: dt = np.dtype([('x', object, 3)])   # corrected

In [45]: dt

Out[45]: dtype([('x', 'O', (3,))])

In [46]: np.empty(3, dt)

Out[46]: 

array([([None, None, None],), ([None, None, None],),

       ([None, None, None],)], dtype=[('x', 'O', (3,))])

In [47]: np.array([(['a','b','c'],)], dt)

Out[47]: array([(['a', 'b', 'c'],)], dtype=[('x', 'O', (3,))])

输入格式应与输出格式匹配。


In [48]: arr = np.empty(3, dt)

In [49]: arr['x']

Out[49]: 

array([[None, None, None],

       [None, None, None],

       [None, None, None]], dtype=object)

In [50]: arr['x'][0]

Out[50]: array([None, None, None], dtype=object)

In [51]: arr['x'][0] = ['a','b','c']

In [52]: arr

Out[52]: 

array([(['a', 'b', 'c'],), ([None, None, None],), ([None, None, None],)],

      dtype=[('x', 'O', (3,))])


查看完整回答
反对 回复 2023-10-06
  • 1 回答
  • 0 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信