【发布时间】:2014-06-30 03:22:03
【问题描述】:
我有以下循环
# `results` are obtained from some mySQldb command.
for row in results:
print row
像这样打印元组:
('1A34', 'RBP', 0.0, 1.0, 0.0, 0.0, 0.0, 0.0)
('1A9N', 'RBP', 0.0456267, 0.0539268, 0.331932, 0.0464031, 4.41336e-06, 0.522107)
('1AQ3', 'RBP', 0.0444479, 0.201112, 0.268581, 0.0049757, 1.28505e-12, 0.480883)
('1AQ4', 'RBP', 0.0177232, 0.363746, 0.308995, 0.00169861, 0.0, 0.307837)
我的问题来自那个迭代,我如何才能创建一个看起来像这样的颠簸 nd.array:
array([['1A34', 'RBP', 0.0, 1.0, 0.0, 0.0, 0.0, 0.0],
['1A9N', 'RBP', 0.0456267, 0.0539268, 0.331932, 0.0464031, 4.41336e-06, 0.522107],
['1AQ3', 'RBP', 0.0444479, 0.201112, 0.268581, 0.0049757, 1.28505e-12, 0.480883],
['1AQ4', 'RBP', 0.0177232, 0.363746, 0.308995, 0.00169861, 0.0, 0.307837]])
最后,ndarray 将具有形状:(4,8)
【问题讨论】:
-
您需要将
str和float放在一个array中吗?可以通过structured array完成,但这不是理想的解决方案。普通数组只允许一种类型(众所周知的dtype)。考虑使用pandas? -
如果
results是生成器,则需要先将其转换为列表。原因是 numpy 数组需要在创建时知道它们的大小。如果您知道results中的元素数量,则可以执行a = numpy.empty((n, 8), dtype='object')之类的操作,然后是:for i, row in enumerate(results): a[i] = row。 -
@AlokSinghal,不完全正确,有一个
numpy.fromiter函数。 -
@CTZhu 感谢您提到这一点。尽管
fromiter似乎会为每个新元素重新分配数组,除非指定了count。 编辑:刚刚查看了源代码,它似乎在每次新分配时都有 50% 的增长,所以它可能没有我想象的那么糟糕。
标签: python numpy multidimensional-array