带有nans

时间:2017-02-27 14:24:15

标签: python numpy pre-allocation

我想初始化一个包含一些数据的数组。我创建了一个随机矩阵(使用np.empty),然后乘以np.nan。那有什么不对吗?或者,我应该坚持使用更好的做法吗?

进一步解释我的情况:我需要存储在数组中的数据。说我有8行数据。每行中元素的数量不相等,因此我的矩阵行长度需要与最长行一样长。在其他行中,某些元素将不会被填充。我不想使用零,因为我的一些数据实际上可能是零。

我意识到我可以使用一些价值我知道我的数据永远不会,但是nans肯定更清晰。只是想知道这是否会导致以后处理任何问题。我意识到我需要使用nanmax而不是max等等。

2 个答案:

答案 0 :(得分:2)

  

我创建了一个随机矩阵(使用np.empty),然后将其乘以np.nan。那有什么不对吗?或者,我应该坚持使用更好的做法吗?

您可以使用np.full,例如:

np.full((100, 100), np.nan)

但是根据您的需要,您可以查看numpy.ma的掩码数组或scipy.sparse稀疏矩阵。但是,它可能适合也可能不适合。无论哪种方式,您可能需要使用相应模块中的不同函数,而不是普通的numpy ufunc。

答案 1 :(得分:0)

我喜欢这样做的一种方法可能不是最好的,但很容易记住的是,用这种方法向numpy对象添加了一个'nans'方法:

import numpy as np
def nans(n):
    return np.array([np.nan for i in range(n)])

setattr(np,'nans',nans)

现在您可以简单地使用np.nans,就像它是np.zeros一样:

np.nans(10)