[解決済み] numpyのdstack関数の理解
質問
numpy の
dstack
関数が実際に行っていることです。ドキュメントはかなりまばらで、ただこう書いてあるだけです。
配列を深さ方向(3軸方向)に順番に積み重ねます。
配列のシーケンスを取り、第3軸に沿って積み重ねます。 で1つの配列にします。で割った配列を再構築します。
dsplit
. これは、2次元の配列(画像)を積み重ねて1つの配列にする簡単な方法です。 3次元配列で処理します。
私が本当にバカで、この意味が明白なのか、それとも「積み重ねる」「順番に」「深さ方向に」「軸に沿って」という言葉について何か誤解しているようなのです。しかし、私はこれらの用語を、以下の文脈で理解したような印象を受けました。
vstack
と
hstack
でいいんです。
この例で考えてみましょう。
In [193]: a
Out[193]:
array([[0, 3],
[1, 4],
[2, 5]])
In [194]: b
Out[194]:
array([[ 6, 9],
[ 7, 10],
[ 8, 11]])
In [195]: dstack([a,b])
Out[195]:
array([[[ 0, 6],
[ 3, 9]],
[[ 1, 7],
[ 4, 10]],
[[ 2, 8],
[ 5, 11]]])
まず最初に
a
と
b
は第3軸を持たないので、どのように''軸''に沿って積み重ねるのでしょうか?
その
そもそも「第三の軸」とは?次に、仮に
a
と
b
は2次元イメージの表現なのに、どうして
さん
2つの2D配列が「順番に」並んでいるのに対して、2D配列が結果的に並んでいるのですか?
どのように解決するのですか?
を理解するのは簡単です。
np.vstack
,
np.hstack
と
np.dstack
* を見ることで行う。
.shape
属性が出力されます。
2つの配列の例を使って
print(a.shape, b.shape)
# (3, 2) (3, 2)
-
np.vstack
は1次元に沿って連結される...print(np.vstack((a, b)).shape) # (6, 2)
-
np.hstack
は2次元に沿って連結される...print(np.hstack((a, b)).shape) # (3, 4)
-
そして
np.dstack
は、3次元に沿って連結される。print(np.dstack((a, b)).shape) # (3, 2, 2)
以降
a
と
b
はどちらも2次元です。
np.dstack
は、サイズ1の3次元を挿入することにより、それらを拡張する。これは,3次元のインデックスを作るために
np.newaxis
(またはその代わりに
None
) のようなものです。
print(a[:, :, np.newaxis].shape)
# (3, 2, 1)
もし
c = np.dstack((a, b))
であれば
c[:, :, 0] == a
と
c[:, :, 1] == b
.
同じ操作をより明示的に行うには、次のようにします。
np.concatenate
このように
print(np.concatenate((a[..., None], b[..., None]), axis=2).shape)
# (3, 2, 2)
* モジュールの全内容をグローバルネームスペースにインポートするには、以下の方法を使用します。
import *
は
いくつかの理由から、バッドプラクティスと考えられています。
. 慣用的な方法としては
import numpy as np
.
関連
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】Pythonでgoogle APIのJSONコードを読み込むとエラーになる件
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】NameError: 名前 'self' が定義されていません。
-
[解決済み] 関数デコレータを作成し、それらを連鎖させるには?
-
[解決済み] スライス表記を理解する
-
[解決済み] 関数内でグローバル変数を使用する
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] Numpyのarray()関数とasarray()関数の違いは何ですか?
-
[解決済み】NumPyのeinsumを理解する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ピロウズ画像色処理の具体的な活用方法
-
Pythonコンテナのための組み込み汎用関数操作
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
FacebookオープンソースワンストップサービスpythonのタイミングツールKats詳細
-
[解決済み】DataFrameのコンストラクタが正しく呼び出されない!エラー
-
[解決済み】Pythonスクリプトで「Expected 2D array, got 1D array instead: 」というエラーが発生?
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac
-
[解決済み] なぜ "import *"がいけないのですか?