如何在Python中生成方形采样网格矩阵并计算对应函数输出值?
解决方案
你需要的是x1、x2取值范围为[-2, 2)的32×32规则网格,对应共1024个采样点,同时生成适配计算y1/y2以及后续神经网络训练的输入输出格式,具体实现如下:
1. 正确生成32×32网格
你之前的第二版代码已经通过endpoint=False避开了包含右边界2的问题,只需把采样点数调整为32即可,这里提供两种常用的网格输出格式:
格式1:二维网格矩阵(适合绘图/逐点矩阵运算)
用numpy.meshgrid生成的X1、X2均为32×32的矩阵,每个位置(i,j)的x1、x2坐标分别对应X1[i,j]、X2[i,j]:
import numpy as np # 生成x1、x2的采样点,共32个,范围[-2,2) x1 = np.linspace(-2, 2, 32, endpoint=False) x2 = np.linspace(-2, 2, 32, endpoint=False) # 生成32×32网格矩阵 X1, X2 = np.meshgrid(x1, x2)
格式2:样本点矩阵(适合直接输入神经网络训练)
神经网络的输入通常要求为(样本数, 特征数)的二维矩阵,这里样本数为32×32=1024,特征数为2(x1、x2),可以直接从上面的网格矩阵展平得到:
# 展平后拼接为(1024, 2)的输入矩阵 X_train = np.stack([X1.flatten(), X2.flatten()], axis=1)
2. 计算y1、y2的输出矩阵
假设你的y1、y2是任意关于x1、x2的函数,比如示例函数y1 = x1**2 + x2**2、y2 = np.sin(x1) + np.cos(x2),可以直接利用numpy的广播特性批量计算,不需要循环:
输出为二维网格格式(32×32)
# 直接对网格矩阵运算,得到的y1、y2都是32×32的矩阵 y1 = X1**2 + X2**2 y2 = np.sin(X1) + np.cos(X2)
输出为训练集格式(1024, 2)
如果需要和X_train对应的训练标签,直接对结果展平拼接即可:
y_train = np.stack([y1.flatten(), y2.flatten()], axis=1)
得到的X_train和y_train可以直接输入到PyTorch/TensorFlow等框架的神经网络中进行训练。
内容的提问来源于stack exchange,提问作者Woohoo
相关产品推荐
相关产品推荐

