我希望按如下所示构建一个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主人公的回答,因为我的实现方式与他们的回答最为相似。
答案 0 :(得分:1)
这复制了您想要的内容:
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)
i concatenate
将2个常量数组(np.full
)保留到结果中。
如果您希望数组为整数值,则可能需要将dtype=int
添加到np.full
。
如果函数取决于坐标,则为numpy.fromfunction
。