首页 > 解决方案 > 有没有办法创建一个充满函数的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 的回答,因为我的实现与他们的回答最相似。

标签: pythonnumpy

解决方案


这再现了你想要的:

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 concatenate2 个常量数组 ( np.full) 到结果。

dtype=int如果您希望np.full您的数组是整数值,您可能需要添加。


如果您的功能取决于坐标numpy.fromfunction


推荐阅读