【发布时间】:2019-01-29 09:22:56
【问题描述】:
我有一个字符串数组,分为三个字段:
x = np.array([(-1, 0, 1),
(-1, 1, 0),
(0, 1, -1),
(0, -1, 1)],
dtype=[('a', 'S2'),
('b', 'S2'),
('c', 'S2')])
我想转换为 4x3 形状的数字数组(类型为 np.int8,但不是必需的),而不是字段。
我的一般方法是转换为 'S2' 类型的 4x3 数组,然后使用astype 将其变为数字。唯一的问题是我能想到的唯一方法涉及view 和np.lib.stride_tricks.as_strided,这似乎不是一个非常强大的解决方案:
y = np.lib.stride_tricks.as_strided(x.view(dtype='S2'),
shape=(4, 3), strides=(6, 2))
z = y.astype(np.int8)
这适用于此处显示的玩具箱,但我觉得必须有一种更简单的方法来解压缩具有相同 dtype 字段的数组。什么是更强大的替代方案?
【问题讨论】:
-
使用列表是将结构化数组转换为简单数据类型的最可靠方法:
np.array(x.tolist(),'int8') -
@hpaulij。我可能会选择那个答案,尽管我现在需要第三份数据副本让我很困扰。
-
为什么是 S2?你是怎么看这篇文章的?
-
@Andy。 stackoverflow.com/q/53953116/2988730。我问这个问题是为了无耻地抄袭 hpaulj 提供的答案。
-
@hpaulj。我使用了您建议的技术:stackoverflow.com/a/53954336/2988730