質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

1787閲覧

MATLABのrepmat関数とnumpyのnp.tile関数の計算結果(出力)が異なる.

masaosa

総合スコア18

MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/11/10 22:42

MATLABのrempat関数の計算をnumpyのnp.tileをもちいて行いたいと考えています.
同じコードを書いても出てくる結果が異なりました.

python

1H=np.arange(100) 2H2= np.tile(H, (10, 1,200)) 3print("H2",H2.shape) 4#出力 -> H2 (10, 1, 20000) 5

MATLAB

1>> H=1:100; 2>> H2=repmat(H, [10, 1, 200]); 3#出力 -> H2 (10, 100, 200)

なぜpythonで3つ目の配列で繰り返されるのに対し,repmatでは2つ目の配列が繰り返されるのでしょうか?
MATLAB使用経験が乏しく,ドキュメントなどを調べたのですが,よくわかりませんでした.
ご教授のほどよろしくお願いいたします.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2021/11/10 23:05

結果が異なるとはどうなるんでしょうか。
guest

回答2

0

ベストアンサー

numpy.tile
に「So a shape (3,) array is promoted to (1, 3) for 2-D replication, or shape (1, 1, 3) for 3-D replication.」と書かれてるように、質問のケースでは「np.tile」で処理される前に自動的に「(1, 1, 100)」というshapeの配列が作成されてるからだと思います

その続きで「If this is not the desired behavior, promote A to d-dimensions manually before calling this function.」と書かれてるように、次元を合わせた配列を予め作成してから「np.tile」で処理したら、結果を変えることができます
たとえば、下記のようにしたらMATLABの「repmat」と同じ結果になります

python

1H2= np.tile(H, (10, 1,200))

↓ 変更

python

1H2= np.tile(H[None, :, None], (10, 1,200))

 .

MATLAB使用経験が乏しく,ドキュメントなどを調べたのですが,よくわかりませんでした.

MATLABの「repmat」は、縦1個x横100個の要素の「H」を、[10, 1, 200]の指示通りに、縦に10個、横に1個並べ(この時点で縦10個x横100個)、さらにそれを別の方向に200個並べた形になってますよね
「H」の形(縦1個x横100個)を変えずに、そのまま3次元に並べてるのです(と私は解釈してます)

参考
repmat
の「3 次元ブロックの配列」

投稿2021/11/11 04:56

編集2021/11/11 05:06
jbpb0

総合スコア7651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masaosa

2021/11/11 14:00

詳細なご説明ありがとうございます.理解致しました.
guest

0

repmatの仕様は良くわかりませんが、Pythonではブロードキャストを使えば良いでしょう。

python

1>>> H=np.arange(100) 2>>> H2 = H.reshape(1,100,1) + np.zeros(2000, dtype=int).reshape(10,1,200) 3>>> print("H2",H2.shape) 4H2 (10, 100, 200)

投稿2021/11/10 23:44

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問