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

如何用Fortran求矩阵各列最小值并计算对应列其余元素和

Fortran实现矩阵列最小值位置替换为列其余元素和的方法

需求说明

给定一个300×178的矩阵,需完成以下操作:

  • 计算每一列的最小值,得到长度为178的结果数组
  • 在原矩阵中,将每列最小值所在的位置替换为该列其余所有元素的和,其余位置设为0(若某列存在多个最小值,所有对应位置都执行替换)

示例

原矩阵:

1 4 6 3
2 6 7 4
5 1 5 7

最终结果矩阵:

8  0  0 14
0  0  0 0
0 11 18 0

实现思路

  1. 先计算每列的总和:列其余元素的和 = 列总和 - 列最小值(总和减去最小值即可得到剩余元素的和)
  2. 遍历每一列,获取该列的最小值
  3. 逐行检查当前列的元素,若等于最小值则替换为“总和-最小值”,否则设为0

Fortran代码实现

program matrix_min_replace
    implicit none
    ! 定义矩阵维度,根据实际需求调整
    integer, parameter :: rows = 300, cols = 178
    ! 若矩阵为整数类型,将real改为integer即可
    real :: mat(rows, cols)
    real :: col_min(cols), col_sum(cols)
    integer :: i, j

    ! -------------- 矩阵初始化部分 --------------
    ! 此处替换为你的矩阵初始化逻辑:
    ! 比如从文件读取:open(10, file='matrix.txt', status='old'); read(10, *) mat; close(10)
    ! 或者手动赋值(测试小矩阵时可修改rows和cols为3和4)
    ! mat = reshape([1.0,2.0,5.0,4.0,6.0,1.0,6.0,7.0,5.0,3.0,4.0,7.0], [3,4])

    ! 计算每列的总和与最小值
    do j = 1, cols
        col_sum(j) = sum(mat(:, j))
        col_min(j) = minval(mat(:, j))
    end do

    ! 生成结果矩阵
    do j = 1, cols
        do i = 1, rows
            if (mat(i, j) == col_min(j)) then
                mat(i, j) = col_sum(j) - col_min(j)
            else
                mat(i, j) = 0.0
            end if
        end do
    end do

    ! -------------- 结果输出部分 --------------
    ! 按行输出结果矩阵,格式可根据需要调整
    do i = 1, rows
        write(*, '(178F6.1)') mat(i, :)
    end do

end program matrix_min_replace

代码说明

  • implicit none:强制变量声明,避免隐式类型匹配错误
  • sum(mat(:, j)) 和 minval(mat(:, j)):分别计算第j列的总和与最小值,是Fortran内置的数组操作函数,简洁高效
  • 双重循环遍历矩阵:外层循环处理列,内层循环处理行,完成替换逻辑
  • 若矩阵为整数类型,只需将代码中的real替换为integer,输出格式调整为(178I6)即可适配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:10:32