小编Rad*_*led的帖子

Numpy:使用max而不是sum来制作Dot产品

是否有一种方法可以在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 numpy max sequence dot-product

3
推荐指数
1
解决办法
923
查看次数

计算scipy稀疏矩阵的稀疏传递闭包

我想在Python中计算稀疏矩阵传递闭包.目前我正在使用scipy稀疏矩阵.

矩阵功率(**12在我的情况下)在非常稀疏的矩阵上运行良好,无论它们有多大,但对于有针对性的不那么稀疏的情况,我想使用更智能的算法.

我发现了Floyd-Warshall算法(德语页面有更好的伪代码)scipy.sparse.csgraph,它比它应该做的多一点:只有Warshall的算法没有功能- 这是一回事.

主要问题是我可以将稀疏矩阵传递给函数,但这完全没有意义,因为函数总是返回一个密集矩阵,因为传递闭包中应该为0的是现在的inf长度路径,有人觉得这个需要明确存储.

所以我的问题是:是否有任何python模块允许计算稀疏矩阵的传递闭包并保持稀疏

我并不是100%确定他使用相同的矩阵,但Gerald Penn他的比较文件中显示了令人印象深刻的加速,这表明有可能解决问题.


编辑:由于存在许多混淆,我将指出理论背景:

我正在寻找传递闭包(不反身或对称).

我将确保在布尔矩阵中编码的关系具有所需的属性,即对称性反身性.

我有两种关系:

  1. 反思
  2. 反身对称

在此输入图像描述 在此输入图像描述

我想对这两种关系应用传递闭包.这与矩阵功率完美匹配(仅在某些情况下它太昂贵):

>>> 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)

python numpy scipy sparse-matrix floyd-warshall

3
推荐指数
1
解决办法
365
查看次数

Numpy:频率阵列到分发

在使用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)

python arrays indexing numpy frequency

0
推荐指数
1
解决办法
142
查看次数