将Python的可变长度列表序列隐式转换为NumPy数组会导致数组类型为object。
v = [[1], [1, 2]]
np.array(v)
>>> array([[1], [1, 2]], dtype=object)
尝试强制其他类型将导致异常:
np.array(v, dtype=np.int32)
ValueError: setting an array element with a sequence.
通过用给定的占位符填充“丢失”值,获得int32类型的密集NumPy数组的最有效方法是什么?
从我的示例序列v
中,如果0是占位符,我希望得到这样的结果
array([[1, 0], [1, 2]], dtype=int32)
这里有一个几乎是矢量化的基于布尔索引的方法,我在其他几篇文章中使用过-
样本运行
*请注意,这几乎是矢量化的,因为这里执行的唯一循环是在开始时,我们得到列表元素的长度。但这一部分对计算要求不高,对整个运行时的影响应该很小。
运行时测试
在这一节中,我正在计时^{} ,^{} ,因为它们似乎可以很好地伸缩,而且本文中基于布尔索引的索引可以用于一个相对较大的数据集,在列表元素中具有三个级别的大小变化。
情况1:尺寸变化较大
案例2:尺寸变化较小
Case#3:每个列表元素的元素数量更多(最多100个)
对我来说,它似乎做得很好!没有明确的赢家,但必须逐案处理!
熊猫和它的
DataFrame
-s能很好地处理丢失的数据。您可以使用itertools.zip_longest:
注意:对于Python 2,它是itertools.izip_longest。
相关问题 更多 >
编程相关推荐