You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

对称稀疏邻接矩阵中两列对应作者的共同合著者查找及代码实现

找出两位作者的共同合著者(基于稀疏对称合著矩阵)

核心思路

共同合著者是指同时与两位目标作者有合著关系的人员。对于稀疏对称矩阵A(A[i,j]=1表示i与j为合著者),只需找到满足A[i,k] = 1且A[j,k] = 1的所有索引k——利用矩阵的对称性,等价于对第i行和第j行做逻辑与运算,再提取结果中的非零元素索引。


Matlab 实现

Matlab对稀疏矩阵的逻辑运算支持良好,直接利用数组逻辑操作即可高效完成:

示例代码

% 构造示例稀疏对称合著矩阵(5位作者)
A = sparse([1,1,2,3,3,4], [2,3,1,1,4,3], 1, 5, 5);
A = A + A'; % 确保对称(若原始矩阵已对称可省略)

% 定义函数:输入稀疏矩阵A、两位作者索引i,j,返回共同合著者索引
function coauthors = find_common_coauthors(A, i, j)
    % 对第i行和第j行做逻辑与,得到同时满足合著的位置
    common = A(i, :) & A(j, :);
    % 提取非零元素的列索引(即共同合著者的ID)
    coauthors = find(common);
    % 可选:排除两位目标作者自身(若矩阵中A[i,i]可能为1时)
    coauthors = coauthors(coauthors ~= i & coauthors ~= j);
end

% 调用示例:找作者1和作者3的共同合著者
common = find_common_coauthors(A, 1, 3);
disp(common); % 输出应为 [2]

说明

  • 稀疏矩阵的逻辑运算&会自动忽略零元素,计算效率远高于稠密矩阵;
  • 若原始矩阵已保证对称,无需执行A = A + A';
  • 若不需要排除目标作者自身,可删除过滤行。

Julia 实现

Julia的SparseArrays包提供了稀疏矩阵的完整操作支持,实现逻辑与Matlab一致:

示例代码

using SparseArrays

# 构造示例稀疏对称合著矩阵(5位作者)
A = sparse([1,1,2,3,3,4], [2,3,1,1,4,3], 1, 5, 5)
A = A + A' # 确保对称(若原始矩阵已对称可省略)

# 定义函数:输入稀疏矩阵A、两位作者索引i,j,返回共同合著者索引
function find_common_coauthors(A::SparseMatrixCSC, i::Int, j::Int)
    # 对第i行和第j行做逻辑与
    common = A[i, :] .& A[j, :]
    # 提取非零元素的索引
    coauthors = findall(!iszero, common)
    # 可选:排除两位目标作者自身
    filter!(k -> k != i && k != j, coauthors)
    return coauthors
end

# 调用示例:找作者1和作者3的共同合著者
common = find_common_coauthors(A, 1, 3)
println(common) # 输出应为 [2]

说明

  • 使用SparseMatrixCSC类型存储稀疏矩阵,Julia会自动优化稀疏运算;
  • findall(!iszero, common)用于定位非零元素位置,等价于Matlab的find;
  • 过滤步骤同样为可选操作,按需保留。

内容的提问来源于stack exchange,提问作者Bojan Lazarevski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 23:41:11