###前提・実現したいこと
Pythonで、Numpyのfrompyfuncを利用してifを含む処理を配列に適用したいと考えています。
その処理の中で、引数の一つであるリストの要素を参照したいのですが、ufuncにすることによって、ブロードキャストの際にエラーが出ます。
以下の例ですと、引数のリストをそれぞれの要素に持つ(3,4)型の配列になって欲しいのですが、(当然ながら)リスト自体をブロードキャストしようとして失敗しているという状況です。
処理が遅いと聞くのでfor文で回すのは避けたいと思っているのですが、やはりfor文で処理するしかないでしょうか。お知恵をお借りしたいです。
2017-09-19追記
実際のリスト(または辞書)はデータベースから取得したパラメータの一覧であり、数十~数百程度の要素をもつテーブルで、配列の要素の値を受けて異なるインデックスを参照する必要があります。テーブルのデータなのでリストではなくndarrayであっても構わないのですが、いずれにしてもブロードキャストで失敗します。
###該当のソースコード
Python
1import numpy as np 2 3 4# ufunc化したい関数の定義 5def hoge(a, list_b): 6 if a % 2 == 0: # 偶数 7 x = a * list_b[0] 8 else: # 奇数 9 x = a * list_b[1] 10 return x 11 12 13# ufunc化 14uf_hoge = np.frompyfunc(hoge, 2, 1, dtype=int) 15 16# 変数の定義 17a = np.arange(12).reshape(3,4) 18list_b = [10, -10] 19 20# 処理 21res = uf_hoge(a,list_b) 22 23
###発生している問題・エラーメッセージ
ValueError Traceback (most recent call last) <ipython-input-14-c2794e861f7f> in <module>() ----> 1 uf_hoge(a,list_b) ValueError: operands could not be broadcast together with shapes (3,4) (2,)
###補足情報(言語/FW/ツール等のバージョンなど)
Python 2.7.5
Numpy 1.12.1
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/19 10:07
2017/09/19 10:50
2017/09/20 12:17