创建从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

回到顶部