【问题标题】:Numpy: Efficient way to create a complex array from two real arraysNumpy:从两个实数数组创建复杂数组的有效方法
【发布时间】:2020-04-22 03:25:13
【问题描述】:

我有两个实数数组(ab),我想创建一个复数数组 (c),它将两个实数数组分别作为其实部和虚部。

最简单的应该是

c = a + b * 1.0j

但是,由于我的数据量很大,这样的代码效率不是很高。

我们也可以这样做,

c = np.empty(data_shape)
c.real = a
c.imag = b

我想知道有没有更好的方法来做到这一点(例如使用buffer 或其他东西)?

非常感谢!

【问题讨论】:

  • 这些有什么问题?
  • 由于我的数组很大,所以上面的方式比较慢。我想知道是否可以直接从a和b中的数据初始化复杂数组而无需太多复制
  • c 必须有自己的数据缓冲区,交错实数和图像值。 c.dtypecomplex128

标签: python arrays numpy scipy memory-efficient


【解决方案1】:

由于每个元素的实部和虚部必须是连续的,因此无论如何您都必须分配另一个缓冲区来交错数据。因此,问题中显示的第二种方法与您可能获得的一样有效。一种选择是

np.stack((a, b), axis=-1).view(np.complex).squeeze(-1)

这适用于任何数组形状,而不仅仅是一维。它通过按 C 顺序沿最后一个维度堆叠来确保正确的交错。

这假设您的数据类型是np.float。如果没有,要么提升为浮动(例如a = a.astype(float)),或者可能将np.complex 更改为其他内容。

【讨论】:

    猜你喜欢
    • 2011-02-05
    • 1970-01-01
    • 2011-01-07
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 2016-03-04
    相关资源
    最近更新 更多