python - 有没有办法创建一个充满函数的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 protagonist 的回答,因为我的实现与他们的回答最相似。
解决方案
这再现了你想要的:
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
。
推荐阅读
- ubuntu - 无法在 Ubuntu for Windows 中更改 etc/passwd
- ibm-cloud - IBM Assistant - 为什么我不能检查现有/设置的实体,而不是通过上下文变量检查?
- c++ - C++ 和 Go
标头正在引发错误 - java - Java json 对象替换键名
- reactjs - 使用 react-router-dom 的受保护页面不起作用
- python - TypeError:列表索引必须是整数或切片,而不是元组在 python 中使用 numpy 切片 3D 列表时
- apache - 一个 Apache 虚拟主机解析为 / 的索引,而其他虚拟主机正确解析
- unity3d - 动画卡在开头统一
- python - 表格抓取 Python
- python-3.x - 使用 flask_wtf 和 sqlalchemy 验证用户输入