printoptions 格式化程序不适用于复数数组的单个元素

Posted

技术标签:

【中文标题】printoptions 格式化程序不适用于复数数组的单个元素【英文标题】:printoptions formatter not working for a single element of an array of complex numbers 【发布时间】:2020-11-27 11:48:09 【问题描述】:

我不明白为什么这个格式化程序不能格式化complex128

import numpy as np
import scipy.sparse as sp

A = sp.diags([1, -2, 1], [1, 0, -1], shape=[3, 3], format='csc')
evals, evecs = sp.linalg.eigs(A, k=1, which='LM')

with np.printoptions(formatter='complex_kind': ':.2f'.format):
    print (evals, evals[0])

此代码显示一个单元素 numpy.ndarray,然后是元素。格式化程序用于数组,而不是单独用于元素:

[-3.41+0.00j] (-3.4142135623730954+0j)

涉及的类型:

type(evals): numpy.ndarray
evals.dtype: dtype('complex128')
type(evals[0]): numpy.complex128

任何线索表示赞赏。

【问题讨论】:

***.com/questions/7746143/formatting-complex-numbers 这对你有帮助吗 evals[0] 是 python 复合体,而不是 numpy 数组。 它不是一个 numpy 复合体。你必须直接使用python格式化。 这是一个numpy.complex128,但printoptions的设置只适用于打印数组,而不是numpy标量。 这里还有一个关于这个问题的讨论:github.com/numpy/numpy/issues/11048 【参考方案1】:

numpy.printoptionsnumpy.set_printoptions 的设置控制 NumPy 如何打印数组。它们不会影响 NumPy 标量(例如 numpy.complex128numpy.float32 等)的打印方式。

例如,

In [14]: np.set_printoptions(precision=3)                                       

In [15]: np.array([np.pi])  # A 1-d array.                                                                                          
Out[15]: array([3.142])

In [16]: np.array(np.pi)    # A 0-d array (aka a scalar array)                                                                        
Out[16]: array(3.142)

In [17]: np.float64(np.pi)  # A scalar float64. Output is not controlled by the print options                                       
Out[17]: 3.141592653589793

请参阅 NumPy github 站点上的 github issue 11048(以及那里提供的链接)以了解有关此主题的讨论。

【讨论】:

以上是关于printoptions 格式化程序不适用于复数数组的单个元素的主要内容,如果未能解决你的问题,请参考以下文章

模型绑定不适用于 asp.net 核心 Web api 控制器操作方法中的 Stream 类型参数。(即使使用自定义流输入格式化程序)

Android 电话号码格式不适用于键盘和 EditText

UIApplication openUrl 不适用于格式化的 NSString

iOS VoIP 推送通知/PushKit 不适用于增强通知格式

为啥 %A 文本格式不适用于 F# 中的内部模块?

阅读更多按钮脚本不适用于 html 格式