如果我想用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()
似乎错了。
有什么建议吗?
答案 0 :(得分:2)
另一种选择是
arr = np.fromiter(zip(indices, validity), dtype=[('index','<u4'),('valid','b1')])
但我怀疑你的初步想法更有效率。 (在您的方法中,您可以使用np.empty()
代替np.zeros()
以获得微小的性能优势。)
答案 1 :(得分:1)
只需使用empty
代替zeros
,它应该感觉不那么“错误”,因为您只需分配数据而不必将其归零。
或者使用fromiter
,如果您热衷于表现,也可以传入可选的count
参数。
这在任何情况下都是超过99%的用例的味道问题,并且不会导致任何明显的性能改进恕我直言。