创建从2D numpy的阵列的COO矩阵
我有一个2D numpy的阵列,其看起来像这样,创建从2D numpy的阵列的COO矩阵
[[3, 4, 5, 6], [4, 5, 6, 7], [9, 10, 3, 5]]
我使用以下代码转换成COO矩阵这样的:
# Flatten 2D array data = np.asarray(twod_array).flatten()
row = np.arange(0, len(data))
col = np.arange(0, len(row))
# Make COO matrix
mat = coo_matrix((data, (row, col)), shape=(len(row), len(row)))
是这是将2D numpy数组转换为COO矩阵的正确方法?
编辑
我所试图做的就是这一点,我有一个coloumn和项目的其他部分。
parts item processor, display, sensor temp. monitoring system
fan baldes, motor, sensor motion detecting fan
. .
. .
我已转换的数据对上面的数字,使得它们可以被进一步处理。
parts items 1, 2, 3 1
4, 5, 3 2
所以现在我想把上面的数据输入到LightFM中,所以我创建了一个这样的2D数组。
[[1, 2, 3, 1], [4, 5, 3, 2]]
但由于LightFM的拟合方法只需要在形状np.float32 coo_matrix [n_users,n_items]其是含有用户 - 项目交互的矩阵。我使用上述方法转换2D阵列。
回答:
In [301]: A = np.array([[3, 4, 5, 6], [4, 5, 6, 7], [9, 10, 3, 5]]) In [302]: A
Out[302]:
array([[ 3, 4, 5, 6],
[ 4, 5, 6, 7],
[ 9, 10, 3, 5]])
你创建一个矩阵的方式:
In [305]: data =A.flatten() In [306]: M = sparse.coo_matrix((data,(np.arange(len(data)),np.arange(len(data))
...:)))
In [307]: M
Out[307]:
<12x12 sparse matrix of type '<class 'numpy.int32'>'
with 12 stored elements in COOrdinate format>
print(M)
会显示这些12个值与他们的座标。
如果它不是太大,我喜欢将矩阵显示为数组。 M.A
是短切的M.toarray()
:
In [308]: M.A Out[308]:
array([[ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5]])
看对角 - 这是原始数组的12个值。那是你要的吗? A
的原始3x4布局完全丢失。它可能是这12个数字的1d列表。
或者你可以只传递数组到稀疏的构造,生产原
In [309]: M1 = sparse.coo_matrix(A) In [310]: M1
Out[310]:
<3x4 sparse matrix of type '<class 'numpy.int32'>'
with 12 stored elements in COOrdinate format>
In [311]: M1.A
Out[311]:
array([[ 3, 4, 5, 6],
[ 4, 5, 6, 7],
[ 9, 10, 3, 5]])
取而代之的是12×12对角线的稀疏副本,这是没有任何0的一个3x4的阵列。这更有意义,如果A
已经有很多0。
你真的知道你需要什么样的稀疏矩阵吗?
以上是 创建从2D numpy的阵列的COO矩阵 的全部内容, 来源链接: utcz.com/qa/260954.html