numpy
関数から行列を構築することは可能ですか? この場合、関数は具体的には 2 つのベクトルの絶対差です: S[i,j] = abs(A[i] - B[j])
。通常の Python を使用した最小限の動作例:
import numpy as np
A = np.array([1,3,6])
B = np.array([2,4,6])
S = np.zeros((3,3))
for i,x in enumerate(A):
for j,y in enumerate(B):
S[i,j] = abs(x-y)
寄付:
[[ 1. 3. 5.]
[ 1. 1. 3.]
[ 4. 2. 0.]]
次のような構造があると便利です。
def build_matrix(shape, input_function, *args)
ここでは、入力関数とその引数を渡して、NumPy の速度の利点を維持できます。
ベストアンサー1
@JoshAdelが提案したことに加えて、outer
方法ufunc
2 つの配列がある場合にブロードキャストを実行するための任意の numpy です。
この場合、必要なのはnp.subtract.outer(A, B)
(または、むしろその絶対値) だけです。
この例ではどちらもかなり読みやすいですが、ブロードキャストの方が便利な場合もあれば、ufunc メソッドを使用する方がわかりやすい場合もあります。
いずれにせよ、両方のトリックを知っておくと便利です。
例えば
import numpy as np
A = np.array([1,3,6])
B = np.array([2,4,6])
diff = np.subtract.outer(A, B)
result = np.abs(diff)
outer
基本的に、、、、accumulate
を、、、、または、などの任意のnumpy と一緒にreduce
使用できます。reduceat
ufunc
subtract
multiply
divide
logical_and
たとえば、np.cumsum
は と同等ですnp.add.accumulate
。つまり、必要であれば のようなものcumdiv
を で実装することもできます。np.divide.accumulate