在Python3号工作。在
假设你有一百万只甲虫,你的任务是把它们斑点的大小分类。所以你要做一张表,每一行都是一只甲虫,行中的数字代表斑点的大小
[[.3, 1.2, 0.5],
[.6, .7],
[1.4, .9, .5, .7],
[.2, .3, .1, .7, .1]]
另外,您决定将它存储在一个numpy数组中,对于这个数组,您用None填充列表(numpy将把它转换为np.nan公司). 在
^{pr2}$但是有一个问题,代表“无”的值可能有三个原因之一
甲虫没有很多斑点,这个数量是不存在的。
甲虫不会静止不动,你也无法测量这个点。
你还没来得及测量那只甲虫,所以价值是未分配的。
我的问题实际上并不涉及甲虫,但原理是一样的。 我想要3个不同的None值,这样我就可以保持这些缺失值的原因不同。我目前的解决方案是使用一个大到物理上不可能的值,但这不是一个非常安全的解决方案。在
假设您不能使用负数-实际上,我测量的数量可能是负数。
数据量大,读取速度很重要。在
评论正确地指出,说速度很重要,而不说什么操作有点无意义。主成分分析可能会被用于变量去相关,欧几里德距离平方计算的聚类算法(但数据在该变量是稀疏的)可能是一些插值。最终是一个递归神经网络,但那将来自一个库,所以我只需要将数据转换成一个输入形式。所以也许没有什么比线性代数更糟糕的了,如果我仔细考虑的话,它应该都适合内存。在
什么是好策略?在
如果您只想要一个不是任何已知值且也不是
None
的对象,只需创建一个新对象:现在可以像使用
^{pr2}$None
那样使用这些值:等等
如果您需要一个可以表示为
float
的值(例如在numpy
数组中),您可以用尾数编码的“额外”数据创建一个NaN值。然而,这样做可能不安全,因为不能保证通过对值的各种操作来保存这些位。在最简单的方法是使用字符串:“not counted”、“unknown”和“N/A”。但是,如果您想在numpy中快速处理,那么具有混合数字/对象的数组不是您的朋友。在
我的建议是添加几个与数据形状相同的数组,由0和1组成。因此数组
missing
=1,其中spot丢失,其他为0,以此类推,与数组not_measured
等相同。。在然后,您可以在任何地方使用nan,然后使用
np.where(missing == 1)
屏蔽数据,以便轻松地找到所需的特定nan。在建议为每个案例创建三个不同的
object
实例。在由于您希望这些对象具有
NaN
的属性,因此可以尝试创建三个不同的NaN
实例。在这是一个黑客攻击的极限,因此使用风险自负,但我不相信任何Python实现都会优化
^{pr2}$NaN
来始终重用同一个对象。不过,您可以添加一个sentinel条件,以便在运行之前进行检查。在如果这样做的话,这样做的好处是允许您比较
NaN
id以检查其含义。在同时,它保留了
numpy
可能对其数组进行的任何优化。在披露:这是一个老生常谈的建议,我很想听听别人的意见。
相关问题 更多 >
编程相关推荐