是否有一种方法可以在numpy中执行以下操作(或者是否有一个通用的数学术语):
假设正常的点积:
M3[i,k] = sum_j(M1[i,j] * M2[j,k])
Run Code Online (Sandbox Code Playgroud)
现在我想通过总和其他操作替换总和,说最大值:
M3[i,k] = max_j(M1[i,j] * M2[j,k])
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样,它与上面完全平行,我们只max接管所有j而不是总和.
其他选项可以是min,prod以及将序列/集合转换为值的任何其他操作.
我想在Python中计算稀疏矩阵的传递闭包.目前我正在使用scipy稀疏矩阵.
矩阵功率(**12在我的情况下)在非常稀疏的矩阵上运行良好,无论它们有多大,但对于有针对性的不那么稀疏的情况,我想使用更智能的算法.
我发现了Floyd-Warshall算法(德语页面有更好的伪代码)scipy.sparse.csgraph,它比它应该做的多一点:只有Warshall的算法没有功能- 这是一回事.
主要问题是我可以将稀疏矩阵传递给函数,但这完全没有意义,因为函数总是返回一个密集矩阵,因为传递闭包中应该为0的是现在的inf长度路径,有人觉得这个需要明确存储.
所以我的问题是:是否有任何python模块允许计算稀疏矩阵的传递闭包并保持稀疏?
我并不是100%确定他使用相同的矩阵,但Gerald Penn在他的比较文件中显示了令人印象深刻的加速,这表明有可能解决问题.
编辑:由于存在许多混淆,我将指出理论背景:
我正在寻找传递闭包(不反身或对称).
我将确保在布尔矩阵中编码的关系具有所需的属性,即对称性或反身性.
我有两种关系:
我想对这两种关系应用传递闭包.这与矩阵功率完美匹配(仅在某些情况下它太昂贵):
>>> reflexive
matrix([[ True, True, False, True],
[False, True, True, False],
[False, False, True, False],
[False, False, False, True]])
>>> reflexive**4
matrix([[ True, True, True, True],
[False, True, True, False],
[False, False, True, …Run Code Online (Sandbox Code Playgroud) 在使用numpy的python中,转换数组的最快方法是什么
array([0,2,3,1,0,0,1])
Run Code Online (Sandbox Code Playgroud)
到另一个数组
array([1,1,2,2,2,3,6])
Run Code Online (Sandbox Code Playgroud)
其中第一个数组给出每个索引的频率(即索引0的频率为0,索引1的频率为2,索引2的频率为3,依此类推),第二个数组重复每个索引的次数为在第一个数组中指定.
背景:我使用它来'enflate'(我找不到任何更好的词)a a kby kMatrix M(稀疏或不稀疏)给定长度k频率向量f:
f = np.array([0,2,3,1,0,0,1])
f_ = np.array([1,1,2,2,2,3,6])
M_ = M[f_[:,None],f_]
Run Code Online (Sandbox Code Playgroud)