1

次のコードを検討してください。

import numpy as np

def f(x, y):
    return (x[:, np.newaxis] - y[:]).sum(axis = 1)

x1 = np.linspace(1, 2, 5)
y1 = np.linspace(3, 4, 7)

print(f(x1, y1))

# x2 = 2. # (won't work)
# x2 = [2.] # (won't work either)
x2 = np.asarray([2.])
print(f(x2, y1))

# x3, _ = np.meshgrid(x1, x1) # won't work
# print(f(x3, y1))

最初の呼び出しf(x1, y1)は期待どおりに機能します。

2 番目の呼び出しでは、float が機能する前に「変換」する必要があります (変換をユーザーに対して透過的にしたいので、関数の定義に変換を含める必要があります)。

3 番目の呼び出しはまったく機能せず、最初の呼び出しと同じように関数の定義を調整する方法がわかりませんが、グリッド上のいくつかのポイントに対してです。

何か案は?ありがとう。

4

2 に答える 2

1

float の透過的な変換の問題に答えるには、少なくとも、np.atleast_1d()定義内でメソッドを使用できます。

def f(x, y):
    x_ = np.atleast_1d(x)
    y_ = np.atleast_1d(y)
    return (x_[:, np.newaxis] - y_[:]).sum(axis = 1)
于 2015-12-01T09:23:33.043 に答える