私はいくつかの高速フーリエ変換(技術的に離散フーリエ変換)の係数の分類にいくつかのsklearn推定を使用しようとしています。私はnpy.fft.fft(X)の出力としてnumpyの配列X_cを取得し、元のX_cの各(複雑な)列が2つ(実数/浮動小数点数)の列に変換された実数の配列X_rに変換したいすなわち、形状は(r、c)から(r、2c)になる。だから私は.view(np.float64)を使う。それは最初に機能します。サブセットが影響を受けます。ビュー(np.float64)の動作
問題は、最初にX_c2 = X_c [:, range(3)]で元の複合配列のいくつかの係数だけを保持してから、以前と同じことを列数2倍のランク数を得ました(各要素の虚数部分は元の下に新しい行に入れられます)。
なぜこれが起こるのか、私は本当に分かりません。自分自身をより明確にするために
は、ここでおもちゃの例である:
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)
誰もがこの動作の違いの理由を参照してくださいしていますか?
高度なインデックス作成ドキュメントのように見えます:[高度なインデックス作成結果のメモリレイアウトは、インデックス作成操作ごとに最適化され、特定のメモリ順序は想定されません。](https://docs.scipy.org/doc – user2357112
結果の特定のメモリ順序を保証したい場合、 'numpy.asarray(result、order = 'C')'はジョブ。 'numpy.array(result、order = 'C'、copy = 'False')'も動作します。わずかにより洗練されていますが、ドキュメントと少しは一貫しています。 – user2357112
'numpy.ascontiguousarray(result)'もあります。これはC連続配列を保証します(Fortranは連続していません)。 – user2357112