从列创建numpy结构化数组

时间:2014-12-31 19:58:28

标签: python arrays python-2.7 numpy

如果我想用dtype = [('index','<u4'),('valid','b1')]创建一个numpy数组,并且我有32位index和布尔valid值的单独numpy数组,我该怎么办?< / p>

我在numpy.ndarray构造函数中没有看到任何方法;我知道我可以这样做:

arr = np.zeros(n, dtype = [('index','<u4'),('valid','b1')])
arr['index'] = indices
arr['valid'] = validity

但不知何故首先调用np.zeros()似乎错了。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

另一种选择是

arr = np.fromiter(zip(indices, validity), dtype=[('index','<u4'),('valid','b1')])

但我怀疑你的初步想法更有效率。 (在您的方法中,您可以使用np.empty()代替np.zeros()以获得微小的性能优势。)

答案 1 :(得分:1)

只需使用empty代替zeros,它应该感觉不那么“错误”,因为您只需分配数据而不必将其归零。

或者使用fromiter,如果您热衷于表现,也可以传入可选的count参数。

这在任何情况下都是超过99%的用例的味道问题,并且不会导致任何明显的性能改进恕我直言。