私は[[6,7,8],[1,2,3],[1,2,3]]
のような3D numpyの配列を持っていると私は、他のすべての「バンド」のための最初の「バンド」[6,7,8]
として架空の値を使用するために架空の値として3D numpyの配列の最初のバンドを使用します。それはそのように見えるはずですはどのようにすべての他のバンド
[[6,7,8],[1+6j,2+7j,3+,8j],[1+6j,2+7j,3+8j]]
誰でもその仕組みが分かりますか? 助けてくれてありがとう!
私は[[6,7,8],[1,2,3],[1,2,3]]
のような3D numpyの配列を持っていると私は、他のすべての「バンド」のための最初の「バンド」[6,7,8]
として架空の値を使用するために架空の値として3D numpyの配列の最初のバンドを使用します。それはそのように見えるはずですはどのようにすべての他のバンド
[[6,7,8],[1+6j,2+7j,3+,8j],[1+6j,2+7j,3+8j]]
誰でもその仕組みが分かりますか? 助けてくれてありがとう!
通常、人の句は最初の行として "最初のバンド"です。
>>> arr = np.array([[6,7,8],[1,2,3],[1,2,3]])
#First need a complex datatype.
>>> arr = arr.astype(np.complex)
>>> arr
array([[ 6.+0.j, 7.+0.j, 8.+0.j],
[ 1.+0.j, 2.+0.j, 3.+0.j],
[ 1.+0.j, 2.+0.j, 3.+0.j]])
# .imag and .real access the real and imaginary parts of the array.
>>> arr[1:].imag = arr[0].real
>>> arr
array([[ 6.+0.j, 7.+0.j, 8.+0.j],
[ 1.+6.j, 2.+7.j, 3.+8.j],
[ 1.+6.j, 2.+7.j, 3.+8.j]])
複数の鋳造の呼び出しをスキップし、vstackはかなりの時間節約することができます:より大きなアレイの場合
arr = np.array([[6,7,8],[1,2,3],[1,2,3]])
%timeit a=arr.astype(np.complex);a[1:].imag = a[0].real
100000 loops, best of 3: 4.03 µs per loop
%timeit np.vstack((arr[0,:], arr[1:,:] + arr[0,:] * 1.j))
10000 loops, best of 3: 25.2 µs per loop
:
arr = np.random.rand(500,500)
%timeit a=arr.astype(np.complex);a[1:].imag = a[0].real
1000 loops, best of 3: 898 µs per loop
In [13]: %timeit np.vstack((arr[0,:], arr[1:,:] + arr[0,:] * 1.j))
1000 loops, best of 3: 1.77 ms per loop
違いを主に持つvstack
オプションから来ています複雑なデータ型に2回キャストします。
%timeit arr.astype(np.complex)
1000 loops, best of 3: 530 µs per loop
1つのコンパクトな解決策。
>>> a = np.array([[6,7,8],[1,2,3],[1,2,3]])
>>> np.vstack((a[0,:], a[1:,:] + a[0,:] * 1.j))
array([[ 6.+0.j, 7.+0.j, 8.+0.j],
[ 1.+6.j, 2.+7.j, 3.+8.j],
[ 1.+6.j, 2.+7.j, 3.+8.j]])
最初の行は、(ゼロと虚数部を有する)複素数値を含んでいるので、新しい配列が複雑であることを考慮してください配列内のすべての要素が同じ型でなければならないためです。
これは単純化することができます: 'np.vstack((a [0]、a [1:] + a [0] * 1.j))'。 – Daniel
良い点ですが、通常、すべての寸法を表示する必要はありません。 – jabaldonedo