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

如何生成表示矩阵中每一对行对应位置元素是否均为1的张量,或直接生成简化后的矩阵?

嘿,这问题我熟!咱们分两步来,先搞定中间的三维张量,再给你说怎么直接跳转到最终的简化矩阵——后者其实更高效,尤其矩阵规模大的时候。

生成中间三维张量

你需要的是一个三维张量,其中每个[i][j]位置的向量,对应原矩阵第i行和第j行逐元素的"均为1"判断结果。用Python的话,不管是纯原生实现还是借助numpy都能轻松搞定:

纯Python实现

# 输入矩阵
A = [[1, 0, 1], [0, 1, 1], [0, 0, 0]]

# 生成三维张量
tensor = []
for row_i in A:
    row_pairs = []
    for row_j in A:
        # 逐元素判断:都为1则记1,否则0
        pair_vec = [1 if a == 1 and b == 1 else 0 for a, b in zip(row_i, row_j)]
        row_pairs.append(pair_vec)
    tensor.append(row_pairs)

print(tensor)

运行后输出就是你要的结果:

[[[1, 0, 1], [0, 0, 1], [0, 0, 0]], [[0, 0, 1], [0, 1, 1], [0, 0, 0]], [[0, 0, 0], [0, 0, 0], [0, 0, 0]]]

numpy高效实现(推荐)

利用numpy的广播机制,一行代码就能生成张量,速度快得多:

import numpy as np

A = np.array([[1, 0, 1], [0, 1, 1], [0, 0, 0]])
# 扩展维度后做元素级逻辑与运算,再转成整数类型
tensor = (A[:, None, :] & A[None, :, :]).astype(int)

print(tensor)
直接得到简化矩阵

如果你的最终目标只是判断每对行是否存在任意一个同时为1的位置,完全不需要生成中间张量,用矩阵点积或者逐行判断就能直接得到结果:

numpy高效实现(最推荐)

二进制矩阵和它的转置做乘法,结果的每个元素[i][j]是第i行和第j行同时为1的位置数量,只要数量>0就记为1:

import numpy as np

A = np.array([[1, 0, 1], [0, 1, 1], [0, 0, 0]])
# 点积后判断是否大于0,转成整数
simplified_matrix = (A @ A.T > 0).astype(int)

print(simplified_matrix)

输出正好是你要的简化矩阵:

[[1 1 0]
 [1 1 0]
 [0 0 0]]

纯Python实现

如果不想用numpy,纯原生代码也能直接生成:

A = [[1, 0, 1], [0, 1, 1], [0, 0, 0]]
row_count = len(A)
simplified_matrix = [[0]*row_count for _ in range(row_count)]

for i in range(row_count):
    for j in range(row_count):
        # 检查是否存在任意位置同时为1
        has_common_one = any(a == 1 and b == 1 for a, b in zip(A[i], A[j]))
        simplified_matrix[i][j] = 1 if has_common_one else 0

print(simplified_matrix)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 18:37:37