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

如何将列表转换为numpy数组后保持原数据格式不变

问题描述

我有一个名为coo的列表,数据示例如下:

coo: [(0.0, 1.0), (1.0, 0.0)]
coo: [(0.0, 1.0), (1.0, 0.0)]
coo: [(0.0, 1.0), (1.0, 0.0)]
coo: [(0.0, 1.0), (1.0, 0.0)]
coo: [(0.0, 1.0), (0.0, 3.0), (0.0, 5001.0), (1.0, 0.0), (1.0, 3.0), (1.0, 5001.0), (3.0, 0.0), (3.0, 1.0), (3.0, 5001.0), (5001.0, 0.0), (5001.0, 1.0), (5001.0, 3.0)]
coo: [(0.0, 1.0), (0.0, 5001.0), (1.0, 0.0), (1.0, 5001.0), (3.0, 5001.0), (5001.0, 0.0), (5001.0, 1.0), (5001.0, 3.0)]
coo: [(0.0, 1.0), (0.0, 5001.0), (1.0, 0.0), (1.0, 5001.0), (2.0, 3.0), (3.0, 2.0), (3.0, 5001.0), (5001.0, 0.0), (5001.0, 1.0), (5001.0, 3.0)]

将其转换为numpy数组后,打印格式变为:

coo: [[0. 1.]
 [1. 0.]]
coo: [[0. 1.]
 [1. 0.]]
coo: [[0. 1.]
 [1. 0.]]
coo: [[0. 1.]
 [1. 0.]]
coo: [[0.000e+00 1.000e+00]
 [0.000e+00 3.000e+00]
 [0.000e+00 5.001e+03]
 [1.000e+00 0.000e+00]
 [1.000e+00 3.000e+00]
 [1.000e+00 5.001e+03]
 [3.000e+00 0.000e+00]
 [3.000e+00 1.000e+00]
 [3.000e+00 5.001e+03]
 [5.001e+03 0.000e+00]
 [5.001e+03 1.000e+00]
 [5.001e+03 3.000e+00]]

我的转换代码如下:

coo=[]
for r, c in zip(row, col):
    # 获取索引r对应的节点名称
    node_r = next((node for node, index in node_to_index.items() if index == r), None)
    # 获取索引c对应的节点名称
    node_c = next((node for node, index in node_to_index.items() if index == c), None)  
    coo.append((node_r, node_c))
coo_array = np.array(coo) 
print('coo:',coo_array)

尝试过指定dtype=float:coo_array = np.array(coo,dtype=float),但问题依旧。希望让coo_array的打印格式和原coo列表一致,比如原列表里的1.0在数组中也显示为1.0,不要变成1.或者科学计数法。


解决方案

问题根源是numpy默认会根据数值大小自动切换打印格式,要统一成原列表的显示风格,有三种可行方式:

方法1:全局修改numpy打印配置

在代码开头添加配置,强制禁用科学计数法并固定小数位数:

import numpy as np
# 禁用科学计数法,保留1位小数(可根据需求调整位数)
np.set_printoptions(suppress=True, precision=1)

之后所有numpy数组的打印都会遵循该规则,比如1.0显示为1.0,5001.0显示为5001.0。

方法2:局部自定义打印(不影响全局配置)

如果不想改动全局设置,可以手动格式化coo_array的输出:

# 生成和原列表格式一致的字符串
formatted_coo = '\n'.join(['[' + ' '.join(f'{num:.1f}' for num in row) + ']' for row in coo_array])
print('coo:', formatted_coo)

这种方式仅针对当前coo_array生效,不影响其他numpy数组的打印。

方法3:使用numpy的array2string函数

利用numpy自带的格式化工具,灵活控制输出:

formatted_str = np.array2string(
    coo_array,
    formatter={'float_kind': lambda x: f'{x:.1f}'},
    separator=' '
)
print('coo:', formatted_str)

通过formatter参数自定义浮点数格式,separator设置元素间的分隔符。


说明

  • 上述示例中的precision=1或:.1f是保留1位小数,若需要更多小数位,可改为precision=2或:.2f,按需调整即可。
  • suppress=True的作用是强制关闭科学计数法,确保所有数值以普通小数形式展示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 08:50:01