我有一个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”类型的结构化数组。
答案 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')])