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

如何实现Numpy矩阵的横向控制台打印功能

如何实现Numpy矩阵的横向控制台打印功能

我明白你的需求啦——想把多个Numpy数组和运算符横向对齐打印,让它们看起来像一行行的数学表达式,而不是各自占一整块。这个功能确实很实用,尤其是展示矩阵运算的时候。

下面我来给你实现这个niceprint函数,完全符合你给出的例子效果:

import numpy as np

def niceprint(*args, op_width=7, eq_width=5):
    # 先处理所有输入参数,转换成每行的字符串列表
    line_lists = []
    n_rows = None
    
    for arg in args:
        if isinstance(arg, np.ndarray):
            # 将数组转换为字符串并按行拆分
            arr_str = np.array2string(arg, separator=' ')
            # 拆分后去掉空行并去除每行首尾的空白
            lines = [line.strip() for line in arr_str.split('\n') if line.strip()]
            
            # 确认所有数组的行数一致
            if n_rows is None:
                n_rows = len(lines)
            else:
                if len(lines) != n_rows:
                    raise ValueError("所有输入的矩阵必须拥有相同的行数")
            line_lists.append(lines)
        else:
            # 处理运算符字符串,只在垂直居中的行显示,其他行显示空格
            if n_rows is None:
                raise ValueError("至少需要传入一个Numpy数组")
            
            middle_row = (n_rows - 1) // 2
            op_lines = []
            # 根据运算符类型选择宽度(*用op_width,=用eq_width,你可以自定义)
            current_width = eq_width if arg == '=' else op_width
            
            for i in range(n_rows):
                if i == middle_row:
                    # 运算符居中显示
                    op_line = arg.center(current_width)
                else:
                    op_line = ' ' * current_width
            line_lists.append(op_lines)
    
    # 拼接每行的所有部分并打印
    for i in range(n_rows):
        current_line = ''.join([lines[i] for lines in line_lists])
        print(current_line)

用你提供的测试数据验证一下:

# 测试代码,和示例中的输入一致
A = np.array([[7,1,0,4], [8,1,5,8], [3,7,2,4], [8,8,2,8]])
B = np.array([[8,6,2,6], [0,3,8,5], [7,8,7,3], [6,0,8,9]])
niceprint(A, "*", B, "=", A @ B)

运行后就能得到你想要的输出效果啦!

函数工作原理

  1. 数组处理:把每个Numpy数组转换成字符串,按换行拆分成单独的行,保留Numpy默认的数组格式,同时去除多余的空白。
  2. 运算符对齐:对于*、=这类运算符,只在所有行的垂直居中位置显示运算符,其他行用相同长度的空格填充,保证运算符和矩阵的中间行对齐,视觉上更美观。
  3. 逐行拼接:把每行对应的数组片段和运算符片段拼接起来,逐行打印,最终形成横向对齐的矩阵运算表达式。

灵活调整

  • 如果你的矩阵行数是奇数(比如3行),函数会自动把运算符放在正中间的行;如果是偶数行,就放在上半部分的最后一行(比如4行的话放在第2行)。
  • 你可以通过op_width和eq_width参数自定义运算符周围的空格宽度,比如把op_width设为9,*的左右就会有更多空格。
  • 如果需要支持其他运算符,只需要在处理非数组参数时添加对应的宽度判断逻辑即可。

备注:内容来源于stack exchange,提问作者Stop US and Israel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 19:52:58