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

时间:2019-08-29 06:36:20

标签: 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主人公的回答,因为我的实现方式与他们的回答最为相似。

1 个答案:

答案 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