设置numpy结构数组的类型

时间:2018-07-11 09:12:49

标签: python numpy

我有一个numpy结构化数组,需要控制各个元素的数据类型。

这是我的示例:

y = array([(True, 144.0), 
           (True, 86.0), 
           (True, 448.0), 
           (True, 76.0), 
           (True, 511.0)], dtype=object)

如果我这样做:

print(y.dtype.fields)

我回来了:

None

但是,我想要的是“布尔”和“浮动”。 如果我访问各个元素,例如y[0][0]y[0][1],我肯定会发现它们确实是布尔型和浮点型。
我对此非常困惑。有什么想法吗?

我需要这个,因为我使用了“ sciki-survival梯度增强”包:https://scikit-survival.readthedocs.io/en/latest/generated/sksurv.ensemble.GradientBoostingSurvivalAnalysis.html#sksurv.ensemble.GradientBoostingSurvivalAnalysis.fit 输入需要为“ bool”和“ float”类型的结构化数组。

3 个答案:

答案 0 :(得分:2)

  

我有一个numpy结构化数组

不,你不会:

  

np.array(..., dtype=object)

您有一个numpy对象数组,其中包含元组。

您可以使用y.astype([('b', bool), ('f', float)])

将其转换为结构化数组

答案 1 :(得分:1)

初始化结构化数组时,请确保指定数据类型。

例如:

y = np.array([(True, 144.0), (True, 86.0), (True, 448.0)],
          dtype=[('col_1', 'bool'), ('col_2', 'f4')])

这应该有效,并且:

y.dtype.fields 

根据需要显示:

mappingproxy({'col_1': (dtype('bool'), 0), 'col_2': (dtype('float32'), 1)})

在此处查看文档:{​​{3}}

答案 2 :(得分:1)

要创建结构化数组,必须预先指定dtype 。如果仅将numpy.array与成对的字面量结合使用,则将得到一个对象为dtype的数组。因此,您需要执行以下操作:

>>> mytype = np.dtype([('b', bool), ('f',float)])
>>> mytype
dtype([('b', '?'), ('f', '<f8')])

然后将mytype传递给数组构造函数:

>>> structured = np.array(
...    [(True, 144.0), (True, 86.0),
...     (True, 448.0), (True, 76.0),
...     (True, 511.0), (True, 393.0), 
...     (False, 466.0), (False, 470.0)], dtype=mytype)
>>>
>>> structured
array([( True,  144.), ( True,   86.), ( True,  448.), ( True,   76.),
       ( True,  511.), ( True,  393.), (False,  466.), (False,  470.)],
      dtype=[('b', '?'), ('f', '<f8')])