PythonのNumpyのNdarrayで、関数の引数で行列を渡して、その関数の中で代入すると値が変わってこないことにハマった。def f(x,y): y=x みたいな。y[...]=xとかy[:,:]=xとかy[:]=xで予期した効果になった。
Pythonは本当に電卓的とかグラフ表示とかScikit-RFで高周波の簡単な解析しかしてこなかった初心者なのですが、、、
ちょっとプログラムを組んでみようかと思ってハマった話です。
Numpyで2次元の行列、例えばx,yがあって、ある関数fを定義してx,yを引数にとってfの中でy=xの何か複雑な式
をしようとしておかしくなった。簡単な例として
def f(x,y):
y=x
とかしておいて
x=np.zeros((3,3))
y=np.eye(3)
f(x,y)
とするとyが0行列になってほしいじゃないですか。参照渡しなんだから。
でも結果はそのまま渡す前とidも同じで
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
あれ?と思って調べたら(というかおそらく簡単な話なので逆に調べ方がわからなくて苦労、、、)、
関数の中で配列そのもの(要素ではなくて)に代入してしまうと、別の配列になってしまって
引数が変更されていない様子。
こういう時は参照渡しで受け取った行列をそのまま返すというのが必要で、
(要素ごとに変えるようなもの)
def f(x,y):
y[...]=x
とか、
※三点リーダーはhttps://qiita.com/yubessy/items/cc1ca4dbc3161f84285e Ellipsistというらしい。
配列の全要素を表す。
def f(x,y):
y[:,:]=x
か、後ろの:が省略できるので
def f(x,y):
y[:]=x
とすると、idも変わらず
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
とできた。
まあこれはいいのだが、、、逆パターンの
y=x[:]
はリストとNumpyの配列で振る舞いが違うとか、、、Pythonはなかなかよくわからん、、、
« マスクがもう無くなるので楽天で100枚入りのを昨日の夜注文したら今日の午前中に届いた。 | トップページ | 吉野家でスタミナ超特盛丼を食す。確かに肉(牛、豚、鶏)だらけででかい、のとマヨネーズとにんにくがジャンキーな味にしている。 »
「日記・コラム・つぶやき」カテゴリの記事
- 高周波・RFニュース 2025年6月25日 Ericssonモビリティレポート6月号は5G FWAのマネタイズについて、QorvoがオートロックへのUWB応用について解説、NATOのダイアナチャレンジは「先進通信技術」と「電磁環境の競合」、TDKがQEIよりRF電源事業譲受(2025.06.25)
- 高周波・RFニュース 2025年6月20日 GSMA MWC25上海開催、3GPPのCCWでのプレゼン資料、Kyocera AVXのNB-NTN向けIoTデバイスのホワイトペーパー、TDKがAI・スマートグラスのSoftEye買収、Mini-CircuitsのAEC-Q200 qualifiled LTCC製品、Fibocomのスマートリビング向けFG390(2025.06.20)
- 高周波・RFニュース 2025年6月19日 QorvoがSバンドレーダ用のBAW switched filter bank発表、Ericssonがミッションクリティカル用途のアンテナ発表、SEMCOが125℃保証の0201インチX7T 1.0㎌ 6.3V MLCC発表、iFixitがトルクスプラスねじについて解説(2025.06.19)
- 高周波・RFニュース 2025年6月18日 Qorvoが5Gインフラ向けBAWフィルタとプリドライバアンプ発表、KeysightとNTTらが300GHz帯で280Gbpsを達成する信号発生システム発表、TDKが自動車用パワー・オーバー・コアクス・インダクター発表、NordicがNeuton AI買収(2025.06.18)
- 高周波・RFニュース2025年6月17日 everythingRF magazineはIMS2025特別号、MITの6Gに向け光でディープラーニングを行うチップ論文、NGMNが6Gに向けたキーメッセージを出版、Litepoint、Spirent、ViaviのTest and Measurementのトレンドレポート(2025.06.17)
« マスクがもう無くなるので楽天で100枚入りのを昨日の夜注文したら今日の午前中に届いた。 | トップページ | 吉野家でスタミナ超特盛丼を食す。確かに肉(牛、豚、鶏)だらけででかい、のとマヨネーズとにんにくがジャンキーな味にしている。 »
コメント