gpt4 book ai didi

python - 用 numpy.NaN 初始化 scipy.sparse 矩阵的最快方法是什么?

转载 作者:太空狗 更新时间:2023-10-29 21:43:50 31 4
gpt4 key购买 nike

我想用 numpy 数组初始化一个稀疏矩阵。 numpy 数组包含 NaN 作为我程序的零,初始化稀疏矩阵的代码如下:

a= np.array([[np.NaN,np.NaN,10]])
zero_a= np.array([[0,0,10]])
spr_a = lil_matrix(a)
zero_spr_a = lil_matrix(zero_a)
print repr(spr_a)
print repr(zero_spr_a)

输出是

1x3 sparse matrix of type 'type 'numpy.float64''    with 3 stored elements in LInked List format1x3 sparse matrix of type 'type 'numpy.int64''    with 1 stored elements in LInked List format

对于包含 0 的数组,稀疏矩阵中只存储了 1 个元素。但是 NaN 数组中存储了 3 个元素,如何将 NaN 视为 scipy 矩阵的零?

最佳答案

如果您只想根据数据创建一个稀疏矩阵,将 NaN 视为零,您可以执行以下操作。首先,让我们创建一个随机数组,其中包含多个 np.nan:

>>> nans = np.random.randint(0, 2, size=(5,5))
>>> a = np.ones((5,5))
>>> a = np.where(nans, np.nan, a)
>>> a
array([[ 1., 1., 1., 1., nan],
[ nan, nan, nan, 1., 1.],
[ nan, nan, 1., 1., nan],
[ 1., 1., 1., 1., nan],
[ 1., nan, 1., nan, nan]])

要使这种 COO 格式稀疏化,很简单:

>>> indices = np.nonzero(~np.isnan(a))
>>> sps = scipy.sparse.coo_matrix((a[indices], indices), shape=a.shape)
>>> sps
<5x5 sparse matrix of type '<type 'numpy.float64'>'
with 14 stored elements in COOrdinate format>

并检查它们是否相同:

>>> sps.toarray()
array([[ 1., 1., 1., 1., 0.],
[ 0., 0., 0., 1., 1.],
[ 0., 0., 1., 1., 0.],
[ 1., 1., 1., 1., 0.],
[ 1., 0., 1., 0., 0.]])

虽然你的 NaN 现在不见了......

关于python - 用 numpy.NaN 初始化 scipy.sparse 矩阵的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14374791/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com