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

Python 有没有办法创建一个充满函数的numpy数组来代替元素?,python,numpy,Python,Numpy,我希望按照如下方式构建一个numpy数组,这样我就不必手动硬编码无数个numpy数组: 定义函数1(x): 返回x**2 定义函数2(x): 返回x**3+1 因此,数组变为: 函数1(x)函数1(x)函数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)| 现在,使用此数组为每个元素填充函数,可以创建多个版本的: | 1 2| | 1 1 2

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


定义函数1(x):
返回x**2
定义函数2(x):
返回x**3+1
因此,数组变为:

函数1(x)函数1(x)函数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)|
现在,使用此数组为每个元素填充函数,可以创建多个版本的:

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

更新

我的实施如下:

def h(x):
返回np.exp(((x-1)**2/(2*(0.25**2)))
def l(x):
返回np.exp(-(x-0)**2/(2*(0.25**2)))
def m(x):
返回np.exp(-(x-0.5)**2/(2*(0.25**2)))
def模糊_模式(x):
返回np.array([
#模式1
np.数组([
[l(x),l(x),h(x)],
[l(x),l(x),h(x)],
[l(x)、l(x)、h(x)]
]),
#模式2
np.数组([
[h(x),h(x),l(x)],
[h(x),h(x),l(x)],
[h(x)、h(x)、l(x)]
]),
#模式3
np.数组([
[h(x),h(x),h(x)],
[l(x),l(x),l(x)],
[l(x)、l(x)、l(x)]
]),
.
.
.,
#图案
np.数组([
[m(x),m(x),m(x)],
[m(x),l(x),m(x)],
[m(x)、m(x)、m(x)]
]),

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

这再现了您想要的:

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个常量数组()添加到结果中

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



如果您的函数依赖于坐标,则。

看起来您实际上希望A是一个返回数组的函数。只需编写一个返回所示形式数组的函数。您可以使用包含未计算函数的object dtype创建一个数组。但是没有方法计算这样的数组。您必须要迭代数组,请逐个元素进行求值。
np.frompyfunc
是一个方便的工具,用于逐个元素处理对象数组。@BrenBarn“a”这只是一个例子。如果我实现了我想要创建的所有类型数组,我将需要创建许多函数,这些函数可能会变得非常复杂和混乱,因为有些数组的每个元素可能都是由不同的数学函数生成的。这里看起来像是XY问题。你在问如何用函数填充numpy数组,但抱怨建议的解决方案ons/workarounds要求您手工编写许多函数。如果实际问题是“如何从某个算法动态生成函数”,请直接提问。(如果是,答案可能包括)这将是一种低效的实现,因为我将有很多函数要实现。另外,有些数组只需要中心元素或角元素由不同的函数组成。