【问题标题】:How to work out ''ComplexWarning: Casting complex values to real discards the imaginary part''?如何解决''ComplexWarning:将复杂值转换为实数会丢弃虚部''?
【发布时间】:2019-06-12 16:21:30
【问题描述】:

我想使用具有复杂条目的矩阵来构造一个新矩阵,但它给了我警告

“ComplexWarning:将复数转换为实数会丢弃虚部”。

因此,新矩阵的条目都是实数。如何让所有的条目都保持虚部?

这是包含我的原始代码的图像

【问题讨论】:

  • 您能告诉我们更多细节吗?什么是index_set,它看起来如何? matrix_1 也有同样的问题?
  • 感谢您的回复,我已经更新了我的问题。
  • 这种索引不应该导致这个问题。不要只给我们一个功能;给我们一个完整的工作示例。
  • 我已附上我的原始代码。

标签: python numpy


【解决方案1】:

我知道我在哪里发出这个警告。

当我构造一个新的空矩阵时,我需要添加 dtype = "complex_"。

例如,

mat__ = np.zeros((k*nboxes,k*nboxes),dtype = 'complex_')

如果我们只是写

mat__ = np.zeros((k*nboxes,k*nboxes))

并对其进行一些操作,例如使用复数矩阵形成新矩阵,然后新矩阵将丢弃虚部。

【讨论】:

    【解决方案2】:

    您可以尝试使用 numpy 通过数组构造函数从 Matrix_1 创建一个新矩阵。这样您就可以指定您使用复数和dtype。像这样的东西应该可以解决问题:

    mat_ = np.array(matrix_1[:,ll,ll,:],dtype = "complex_")

    我用来确定的一些测试:

    import numpy as np
    
    abc = np.array([[1+1j,2+2j,3+3j],[4+4j,5+5j,6+6j],[7+7j,8+8j,9+9j]],dtype = "complex_") # initial
    print(abc)
    abc2 = np.array(abc[1:,:1],dtype = "complex_") # post transformation
    print(abc2)
    

    【讨论】:

    • 您的测试用例应该可以在没有dtype 参数的情况下工作。 1j 值的存在足以使abcabc2 变得复杂。在不需要索引后添加np.array
    猜你喜欢
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多