如何将一个函数矢量化为两个参数,以两个不同长度的序列(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
,这也是一个好的选择吗?