したがって、基本的に私の質問は「zip」(またはizip)に関連しており、この質問は以前に尋ねられました....
反復ごとに各リストから1つの要素を取得して、2つのリストを反復処理するより良い方法はありますか?
2 つの変数がある場合、それらは長さ n の値の 1 次元配列であるか、単一の値である場合、それらをループして n 値が返されるようにするにはどうすればよいですか。
「zip」のようなものは、私が望むことを行います-単一の値と配列を渡すと文句を言うことを除いて。
私が目指しているものの例を以下に示します-基本的に、Pythonよりも効率的な計算を行うac関数があります。いくつかのnumpy関数のように動作させたい-配列とスカラーの混合物を問題なく扱うので、そのためのpythonラッパーを書きました。ただし、私が言うように、「zip」は失敗します。原則として、入力 s のいくつかのテストを行い、スカラーと配列のバリエーションごとに異なるステートメントを作成できると思いますが、python にはもっと賢いものが必要なようです.... ;) 何かアドバイスはありますか?
"""
Example of zip problems.
"""
import numpy as np
import time
def cfun(a, b) :
"""
Pretending to be c function which doesn't deal with arrays
"""
if not np.isscalar(a) or not np.isscalar(b) :
raise Exception('c is freaking out')
else :
return a+b
def pyfun(a, b) :
"""
Python Wrappper - to deal with arrays input
"""
if not np.isscalar(a) or not np.isscalar(b) :
return np.array([cfun(a_i,b_i) for a_i, b_i in zip(a,b)])
else :
return cfun(a, b)
return cfun(a,b)
a = np.array([1,2])
b= np.array([1,2])
print pyfun(a, b)
a = [1,2]
b = 1
print pyfun(a, b)
編集 :
みんなの提案に感謝します。解決策として np.braodcast を使用する必要があると思います-私の観点からは最も単純に思えるので.....