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

生成±1矩阵后,二维数组唯一相邻元素对乘积求和实现咨询

计算20×20±1矩阵的唯一相邻元素对乘积之和

嘿,看起来你已经搞定了第一步的随机矩阵生成,接下来的相邻对乘积求和其实可以用更简洁的方式实现,我来帮你梳理一下思路和代码实现:

问题回顾

  • 已成功生成随机填充1和-1元素的20×20矩阵
  • 核心目标:计算所有唯一相邻元素对的乘积之和,再乘以系数D,理论结果范围为0到800D(注:如果是无重复的相邻对,实际总和范围是-760到760,乘以D后对应-760D到760D,推测你指的是绝对值范围或统计逻辑有微调,下面先按无重复的唯一对来实现)
  • 当前你尝试的思路:通过创建22×22的扩展矩阵来处理边缘元素的索引问题,这个思路是可行的,不过我们可以优化遍历逻辑,避免重复计算相邻对。

实现方案(以Python为例)

1. 生成初始矩阵

用numpy快速生成20×20的±1随机矩阵:

import numpy as np

# 生成20×20的随机±1矩阵
original_matrix = np.random.choice([1, -1], size=(20, 20))

2. 计算唯一相邻对乘积之和

为了保证“唯一”,我们只遍历每个元素时计算它右侧和下侧的相邻元素乘积——这样每个相邻对只会被计算一次,不会重复统计:

sum_products = 0
rows, cols = original_matrix.shape

# 遍历所有元素,计算右侧和下侧的相邻乘积
for i in range(rows):
    for j in range(cols):
        # 计算右侧相邻对(避免超出矩阵范围)
        if j < cols - 1:
            sum_products += original_matrix[i][j] * original_matrix[i][j+1]
        # 计算下侧相邻对(避免超出矩阵范围)
        if i < rows - 1:
            sum_products += original_matrix[i][j] * original_matrix[i+1][j]

# 计算最终结果
final_result = sum_products * D

3. 扩展矩阵版本实现(对应你的初始思路)

如果你坚持要用22×22扩展矩阵的方式,也可以这样写,注意要避开填充边缘的无效相邻对:

# 创建22×22的扩展矩阵,边缘填充原矩阵的边缘元素
extended_matrix = np.pad(original_matrix, pad_width=1, mode='edge')

sum_products = 0
# 遍历原矩阵对应的位置(扩展矩阵的1~20行,1~20列)
for i in range(1, 21):
    for j in range(1, 21):
        # 右侧相邻对(对应原矩阵的(i-1,j)和(i-1,j+1))
        sum_products += extended_matrix[i][j] * extended_matrix[i][j+1]
        # 下侧相邻对(对应原矩阵的(i-1,j)和(i,j))
        sum_products += extended_matrix[i][j] * extended_matrix[i+1][j]

final_result = sum_products * D

结果验证

20×20矩阵的唯一相邻对总数是:

  • 横向相邻对:20行 × 19对/行 = 380个
  • 纵向相邻对:20列 × 19对/列 = 380个
  • 总计:760个唯一相邻对

每个乘积的结果是1(两个元素相同)或-1(两个元素不同),所以sum_products的范围是-760到760,乘以D后结果范围是-760D到760D。如果你的理论范围是0到800D,可以对结果取绝对值,或者调整统计逻辑为包含重复计数(但这样总数会翻倍,范围也会扩大)。

内容的提问来源于stack exchange,提问作者Eddie.Campana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:00:33