【发布时间】:2017-12-13 15:03:18
【问题描述】:
我正在尝试使用一些 sklearn 估计器对一些快速傅立叶变换(技术上的离散傅立叶变换)的系数进行分类。我获得了一个 numpy 数组 X_c 作为 np.fft.fft(X) 的输出,我想将其转换为一个真正的 numpy 数组 X_r,原始 X_c 的每个(复杂)列都转换为两个(实/浮点)列X_r,即形状从 (r, c) 到 (r, 2c)。所以我使用 .view(np.float64)。并且一开始就有效。
问题是,如果我首先决定只保留原始复数数组的一些系数 X_c2 = X_c[:, range(3)] 然后做和以前一样的事情,而不是让列数加倍,我得到的秩数加倍(每个元素的虚部放在原来的下面的新行中)。
我真的不明白为什么会这样。
为了让自己更清楚,这里是一个玩具示例:
import numpy as np
# I create a complex array
X_c = np.arange(8, dtype = np.complex128).reshape(2, 4)
print(X_c.shape) # -> (2, 4)
# I use .view to transform it into something real and it works
# the way I want it.
X_r = X_c.view(np.float64)
print(X_r.shape) # -> (2, 8)
# Now I subset the array.
indices_coef = range(3)
X_c2 = X_c[:, indices_coef]
print(X_c2.shape) # -> (2, 3)
X_r2 = X_c2.view(np.float64)
# In the next line I obtain (4, 3), when I was expecting (2, 6)...
print(X_r2.shape) # -> (4, 3)
有人看到造成这种行为差异的原因吗?
【问题讨论】:
标签: python arrays numpy casting subset