【发布时间】:2020-12-30 11:48:52
【问题描述】:
我已经定义了一个自定义 dtype。例如:
vec = np.dtype([('x', float), ('y', float), ('z', float)])
quat = np.dtype([('w', float), ('v', vec)])
现在我想做一个标量四元数:
quat((1.0, (0.0, 0.0, 0.0)))
我希望如果有的话,我的元组语法是不可接受的。但是,相反,我收到以下错误:
TypeError: 'numpy.dtype' object is not callable
documentation on scalars 中的 relevant portion 意味着可以在 numpy 中构建这样的结构化类型的标量。
如何实例化quat 标量?有可能吗?
顺便说一句,我使用了以下解决方法:
np.array([(1.0, (0.0, 0.0, 0.0))], dtype=quat)
这不会产生实际的标量(尽管老实说它对于我的目的来说已经足够好了,这使得这个问题主要是理论上的)。对结果调用 item 会返回 tuple,而不是标量 quat 对象。
【问题讨论】:
-
虽然
int和np.float32可以同时作为dtype和函数来创建一个numpy 标量,但我不认为np.dtype实例可以做到这一点。它没有__call__方法(检查一下)。 -
复合数据类型创建一个
np.void对象。 (或recarraynp.record) -
@hpaulj。我完全同意。但是文档中似乎隐含了 some 方式。我想如果有人知道,那就是你,Divakar 左右。
-
@hpaulj。所以我试着做
quat.type(pack('dddd', 1.0, 0.0, 0.0, 0.0))。这可能是朝着正确方向迈出的一步,但其原始形式并不完全有帮助 -
@hpaulj。明白了:
quat.type(pack('dddd', 1.0, 0.0, 0.0, 0.0)).view(quat)