如何将一个函数矢量化为两个参数,以两个不同长度的序列(m和n)作为参数,并在Python NumPy中返回一个矩阵(m x n)?

如何将一个函数矢量化为两个参数,以两个不同长度的序列(m和n)作为参数,并在Python NumPy中返回一个矩阵(m x n)?,python,numpy,iteration,vectorization,Python,Numpy,Iteration,Vectorization,我必须创建序列(例如)和函数: import numpy as np a = np.arange(10,21) b = np.arange(10,16) def f(x,y): return x**2+y*3 我想构造一个矩阵(10x5),这样它的每一个元素都是这些元素上函数的迭代结果。因此,例如,矩阵第二行和第三列的元素将是: matrix[1,2] >>> 157 即f(11,12)=11**2+12*3=121+36=157 我尝试使用嵌套循环(两个“fo

我必须创建序列(例如)和函数:

import numpy as np

a = np.arange(10,21)
b = np.arange(10,16)

def f(x,y):
    return x**2+y*3
我想构造一个矩阵(10x5),这样它的每一个元素都是这些元素上函数的迭代结果。因此,例如,矩阵第二行和第三列的元素将是:

matrix[1,2]
>>> 157
即f(11,12)=11**2+12*3=121+36=157

我尝试使用嵌套循环(两个“for”循环),但速度太慢。numpy是否有一种方法可以立即执行这些操作,例如一个np函数,它将参数
a
b
f
作为参数,并返回所需的结果


非常感谢:)

您可以将
a
转换为列向量,然后瞧:

matrix = a[:,np.newaxis] ** 2 + b * 3
虽然像这样的东西更干净:

a, b = np.ogrid[10:21,10:16]
matrix = a ** 2 + b * 3

(由于hpaulj的评论而编辑)

def(x,y):返回x[:,无]**2+y*3
?如果
x
是(m,1)数组,而
y
是(n,)形状,则像加法和乘法这样的操作将创建(m,n)数组。(n,)会自动展开为(1,n)。这叫做
广播
。您不想要一个11x6矩阵吗?或者可以更改arange的边界()
a[:,None]
可能是将(m,)形状转换为(m,1)的最常见和最惯用的方法。它(和
重塑
)生成一个
视图
<代码>np.c
复制了一份。很好!我也看到了
np.expand_dims
,这也是一个好的选择吗?