有没有办法创建一个充满函数的 numpy 数组来代替元素?



我希望按如下方式构建一个numpy数组,这样我就不必手动对无数的numpy数组进行硬编码:


def func_1(x):
return x**2
def func_2(x):
return x**3+1

所以数组变成:

| func_1(x) func_1(x) func_2(x) |
| func_1(x) func_1(x) func_2(x) |
A =  | func_1(x) func_1(x) func_2(x) |
| func_1(x) func_1(x) func_2(x) |

现在,这个数组填充了每个元素的函数,创建许多版本的 A:

| 1  1  2 |
| 1  1  2 |
A(x=1) = | 1  1  2 |
| 1  1  2 |

| 4  4  9 |
| 4  4  9 |
A(x=2) = | 4  4  9 |
| 4  4  9 |

更新

我按如下方式实现了这一点:

def h(x):
return np.exp(-((x - 1)**2/ (2*(0.25**2))))
def l(x):
return np.exp(-((x - 0)**2/ (2*(0.25**2))))
def m(x):
return np.exp(-((x - 0.5)**2/ (2*(0.25**2))))
def fuzzy_patterns(x):
return np.array([ 
# pattern_1
np.array ([
[l(x), l(x), h(x)],
[l(x), l(x), h(x)],
[l(x), l(x), h(x)]
]),
# pattern_2
np.array ([
[h(x), h(x), l(x)],
[h(x), h(x), l(x)],
[h(x), h(x), l(x)]
]),
# pattern_3
np.array ([
[h(x), h(x), h(x)],
[l(x), l(x), l(x)],
[l(x), l(x), l(x)]
]),
.
.
.,
# pattern_n
np.array ([
[m(x), m(x), m(x)],
[m(x), l(x), m(x)],
[m(x), m(x), m(x)]
]),

最后,考虑到代码的可读性,这似乎是最直接的方法。我会接受 hiro 主角的答案,因为我的实现与他们的答案最相似。

这会重现您想要的内容:

def A(x):
a = np.full(shape=(3, 2), fill_value=func_1(x))
b = np.full(shape=(3, 1), fill_value=func_2(x))
return np.concatenate((a, b), axis=1)

我将 2 个常量数组 (np.full(concatenate到结果。

如果您希望数组为整数值,则可能需要将dtype=int添加到np.full


如果您的函数依赖于坐标,则numpy.fromfunction.

最新更新