Python:从函数和数组创建矩阵

Python:从函数和数组创建矩阵,python,numpy,Python,Numpy,我肯定以前有人问过这个问题,但我找不到解决办法(这个问题也必须有一个更好的标题-欢迎建议)。有没有一种更快的方法来做下面的事情?我想通过一个函数将数组元素映射到矩阵 a = np.random.rand(100) b = np.random.rand(100) c = 5 matrix = np.zeros((100, 100)) for i in range(100): for j in range(100): matrix[i, j] = function(a[i]

我肯定以前有人问过这个问题,但我找不到解决办法(这个问题也必须有一个更好的标题-欢迎建议)。有没有一种更快的方法来做下面的事情?我想通过一个函数将数组元素映射到矩阵

a = np.random.rand(100)
b = np.random.rand(100)
c = 5

matrix = np.zeros((100, 100))
for i in range(100):
    for j in range(100):
        matrix[i, j] = function(a[i], b[j], c)
我试过这个,但不起作用:

matrix = np.fromfunction(lambda i, j: function(a[i], b[j], c), (100, 100), dtype=float) # Doesn't work
这也不是:

vfunction = np.vectorize(function)
matrix = vfunction(a, b, c) # Doesn't work

找到了一个利用此功能的相关解决方案:您能否介绍一下
功能
?这真的是一个不可向量化的操作吗?我使用的函数是“return1/(1+np.exp(-(a+b+c))”,它只接受3个数字。矢量化函数没有给我想要的矩阵。
np.exp
与数组一起工作。您需要做的是找出如何从整个数组中计算
a+b+c
,而不仅仅是从它们的元素中。无需进一步修改,该表达式将生成一个(100,)数组,该数组与
a
b
的常见形状相匹配。想想
广播
。当前使用:
a_=np.tile(a,(100,1)).T
<代码>b_u=np.tile(b,(100,1))<代码>矩阵=函数(a,b,c)。这是有效的,我不知道如何做得更好。