【发布时间】:2019-08-05 14:09:20
【问题描述】:
在 Python3 中工作。
假设您有一百万只甲虫,您的任务是对它们的斑点大小进行分类。所以你会做一个表格,每行是一只甲虫,行中的数字代表斑点的大小;
[[.3, 1.2, 0.5],
[.6, .7],
[1.4, .9, .5, .7],
[.2, .3, .1, .7, .1]]
此外,您决定将其存储在一个 numpy 数组中,并用 None 填充列表(numpy 会将其转换为 np.nan)。
[[.3, 1.2, 0.5, None, None],
[.6, .7, None, None, None],
[1.4, .9, .5, .7, None],
[.2, .3, .1, .7, .1]]
但是有一个问题,表示为 None 的值可以是 None 出于 3 个原因之一;
甲虫没有很多斑点;这个数量不存在。
甲虫不会静止不动,您也无法测量位置。
你还没来得及测量那只甲虫,所以没有赋值。
我的问题实际上并不涉及甲虫,但原理是一样的。 我想要 3 个不同的 None 值,所以我可以保持这些缺失值的原因不同。我目前的解决方案是使用一个大到物理上不可能的值,但这不是一个非常安全的解决方案。
假设您不能使用负数 - 实际上我测量的数量可能是负数。
数据量大,读取速度很重要。
编辑; cmets 正确地指出,说速度很重要,但不说什么操作有点毫无意义。主成分分析可能将用于变量去相关,用于聚类算法的欧几里德距离平方计算(但该变量中的数据稀疏)可能进行一些插值。最终是一个递归神经网络,但这将来自一个库,所以我只需要将数据转换为输入形式。所以也许没有什么比线性代数更糟糕的了,如果我小心的话,它应该都可以放入 RAM 中。
什么是好的策略?
【问题讨论】:
-
如果你想要不同的值,不要使用
None。使用其他类型。这不是None的用途。 -
如果您使用 numpy 数组,为什么使用
np.nan、np.inf和-np.inf不是解决方案? -
也许添加一个包含点数的列?这显示了有多少其他列具有有效值,并且对于其他情况可能存在特殊值,例如 -1 和 -2。
-
Masked Arrays 对您的问题有意义吗?它们是表示无效/缺失数据的一种方式。我不知道会有多大的性能影响。
-
Create an
Enum的值是None的不同风格。
标签: python python-3.x numpy nonetype