adj)工作? 代码运行良好,但我不希望尖括号 >在乘法语句中。我相信文档说明为 multiply() 提供两个值,但它仍在工作并通过替换 (adj.T-6ren">
gpt4 book ai didi

python - 矩阵的 numpy 乘法()中出现意外的尖括号 "<"

转载 作者:行者123 更新时间:2023-12-04 10:48:46 25 4
gpt4 key购买 nike

怎么样adj.multiply(adj.T > adj)工作?

代码运行良好,但我不希望尖括号 >在乘法语句中。我相信文档说明为 multiply() 提供两个值,但它仍在工作并通过替换 (adj.T > adj) 产生输出矩阵与 (True) , (False) , (adj.T != adj) ,但不是 (adj.T = adj) .还有,那个 multiply()方法不附加在变量的末尾,而是用作 adj.multiply()这里。方法乘法的来源似乎只是将其转换为 csr_matrix 并运行 numpy 的 multiply() ,然后 IIRC 将其转换回 coo_matrix。 .T当然意味着“转置”。

# build symmetric adjacency matrix
adj = adj + adj.T.multiply(adj.T > adj) - adj.multiply(adj.T > adj)`

在某些情况下,“adj”是来自 graph convolutional network 的 scipy coo_matrix在 github 上,我试图了解输入是如何准备的。
adj = sp.coo_matrix((np.ones(edges.shape[0]), (edges[:, 0], edges[:, 1])),
shape=(labels.shape[0], labels.shape[0]),
dtype=np.float32)

尝试重现代码需要运行整个页面。

以下更容易重新创建和测试:
import numpy as np
import scipy.sparse as sp

asdf = sp.coo_matrix((np.ones(5), (np.ones(5), np.ones(5))), shape=(5,5),
dtype=np.float32)
print(asdf)
print(asdf.toarray())
asdf = asdf + asdf.T.multiply(asdf.T > asdf) - asdf.multiply(asdf.T > asdf)
print("asdf")
print(asdf.toarray())

在 row=1,col=1 处,值为 5,其中 asdf.T.multiply(True)语句将其值 5 加倍到 10。传递由空格或逗号分隔的两个变量不起作用。

更新:

我在“>”尖括号之前放置了一个数字(不是整个矩阵),它产生了这个错误:

/usr/local/lib/python3.6/dist-packages/scipy/sparse/compressed.py:287: SparseEfficiencyWarning: Comparing a sparse matrix with a scalar greater than zero using < is inefficient, try using >= instead. warn(bad_scalar_msg, SparseEfficiencyWarning)



看到这一点,我意识到有一个不同的 sparse multiply() 方法没有在没有明确输入“sparse”的情况下显示在谷歌中。它的 documentation is here ,但我看不出它是如何处理尖括号或条件的。

最佳答案

为这个问题做一个记录。
当我尝试处理关于这行代码的混淆时:

adj = adj + adj.T.multiply(adj.T > adj) - adj.multiply(adj.T > adj)
我需要理解三个部分:
1. adj.T > adj
它构建了一个与矩阵 adj 形状相同的 bool 类型矩阵。
2.乘()
函数实际上是实现Hadamard积,而不是Dot积。官方文档给出了描述:“Point-wise multiplication by another matrix”。
3. 对称邻接矩阵的构建方式
我们最好在 (i, j) 和 (j, i) 之间保留较大的权重项,而不是简单地将它们加在一起,因为后者会增加边的权重。
有解释它们的代码:
import numpy as np
import scipy.sparse as sp
row = np.array([0, 0, 0, 1, 1, 1, 2, 2, 2])
col = np.array([0, 1, 2, 0, 1, 2, 0, 1, 2])

A = sp.coo_matrix(([0, 3, 2, 0, 0, 0, 7, 4, 0], (row, col)),
shape=(3, 3), dtype=np.float32)
print(A.toarray())
print((A.T > A).toarray())
print(A.T.multiply(A.T > A).toarray())

A = A + A.T.multiply(A.T > A) - A.multiply(A.T > A)
print("The symmetric adjacency matrix:", A.toarray(), sep='\n')

关于python - 矩阵的 numpy 乘法()中出现意外的尖括号 "<",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59580369/

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