如何移除字典中numpy数组的dtype=int64标识并保留数组结构?
解决numpy数组在字典中显示dtype的问题
你遇到的问题是numpy数组的默认字符串表示会包含dtype=int64标识,而你希望保留数组的numpy类型,仅隐藏这个标识。以下是几种可行的解决方案:
方案1:修改numpy全局打印选项
通过numpy.set_printoptions自定义数组的显示格式,让所有numpy数组打印时不再显示dtype:
import numpy as np # 配置numpy打印格式,自定义数组的显示文本 np.set_printoptions(formatter={'array': lambda arr: f"array({arr.tolist()})"}) rng = np.random.default_rng() emptydictionary = {} element2 = rng.integers(1, 10, size=50) element1 = 5 def function(element1, element2): emptydictionary.update({element1: element2}) return emptydictionary result = function(element1, element2) print(result) # 验证数组类型仍为numpy.ndarray print(type(result[5])) # 输出 <class 'numpy.ndarray'>
方案2:自定义字典打印函数
如果不想修改全局设置,可以编写专门的打印函数,仅处理目标字典中的数组:
import numpy as np rng = np.random.default_rng() emptydictionary = {} element2 = rng.integers(1, 10, size=50) element1 = 5 def function(element1, element2): emptydictionary.update({element1: element2}) return emptydictionary def print_dict_clean(d): items = [] for key, val in d.items(): if isinstance(val, np.ndarray): # 将数组转为不含dtype的字符串格式 val_str = f"array({val.tolist()})" else: val_str = repr(val) items.append(f"{repr(key)}: {val_str}") print("{" + ", ".join(items) + "}") result = function(element1, element2) print_dict_clean(result) # 验证数组类型 print(isinstance(result[5], np.ndarray)) # 输出 True
方案3:自定义numpy数组子类
创建一个继承自np.ndarray的子类,重写__repr__方法来隐藏dtype:
import numpy as np class NoDtypeArray(np.ndarray): def __repr__(self): return f"array({self.tolist()})" rng = np.random.default_rng() emptydictionary = {} # 将生成的数组转换为自定义子类 element2 = rng.integers(1, 10, size=50).view(NoDtypeArray) element1 = 5 def function(element1, element2): emptydictionary.update({element1: element2}) return emptydictionary result = function(element1, element2) print(result) # 验证仍为numpy数组类型 print(isinstance(result[5], np.ndarray)) # 输出 True
各方案特点
- 方案1:全局生效,适合整个项目需要统一隐藏dtype的场景。
- 方案2:仅影响目标字典的打印,不改变其他数组的显示,灵活性强。
- 方案3:自定义数组类型,适合需要长期使用无dtype显示格式的数组。
所有方案都保留了数组的numpy类型及相关特性,只是修改了显示效果。
内容的提问来源于stack exchange,提问作者hanindul
相关产品推荐
相关产品推荐

