gpt4 book ai didi

python - numpy array.tolist() 和 scipy.sparse tolist() 有什么区别

转载 作者:太空宇宙 更新时间:2023-11-03 14:28:28 25 4
gpt4 key购买 nike

import numpy as np
from scipy.sparse import lil_matrix

使用 numpy 我得到

test_mat = (np.ones((4,6)))
test_list = test_mat[0,:].tolist()

test_list 作为一个包含 6 个元素的列表。但是当我使用 scipy.sparse

test_mat = lil_matrix(np.ones((4,6)))
test_list = test_mat[0,:].todense().tolist()

test_list 作为具有一个元素的列表给出,而该列表又具有 6 个元素(test_list[0] 具有 6 个元素)。

有人可以向我解释导致这种差异的潜在机制吗?谢谢

最佳答案

这是因为 lil_matrix.todense() 返回一个 numpy matrix,它总是有 ndim = 2,而不是 numpy ndarray,当切片只选中一行/一列时,会缩维。矩阵/数组的维数在转换为列表列表格式时得以保留。

要查看数组中的二维行为,可以将其切片为:

test_mat = np.ones((4,6))
test_list = test_mat[0:1,:].tolist()

或者,将其启动为:

test_mat = np.matrix(np.ones((4,6)))
test_list = test_mat[0:1,:].tolist()

您将看到列表的二维列表,就像您在 lil_matrix

中所做的那样

这是您转换为列表之前拥有的内容:

In [137]: ma = np.ones((4,6))

In [138]: mm = np.matrix(np.ones((4,6)))

In [139]: ms = lil_matrix(np.ones((4,6)))

In [141]: ma[0,:]
Out[141]: array([ 1., 1., 1., 1., 1., 1.])

In [142]: mm[0,:]
Out[142]: matrix([[ 1., 1., 1., 1., 1., 1.]])

In [143]: ms[0,:].todense()
Out[143]: matrix([[ 1., 1., 1., 1., 1., 1.]])

使用不降低维度的切片:

In [144]: ma[0:1,:]
Out[144]: array([[ 1., 1., 1., 1., 1., 1.]])

上面方括号的个数是关键。看看它们的形状:

In [145]: ma[0:1,:].shape
Out[145]: (1, 6)

In [146]: ma[0,:].shape
Out[146]: (6,)

In [147]: mm[0,:].shape
Out[147]: (1, 6)

In [148]: ms[0,:].shape
Out[148]: (1, 6)

关于python - numpy array.tolist() 和 scipy.sparse tolist() 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16004212/

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