Python 计算从第一行和第一列输入的数组值

Python 计算从第一行和第一列输入的数组值,python,arrays,numpy,pandas,vectorization,Python,Arrays,Numpy,Pandas,Vectorization,我想使用单独的函数计算矩阵值,并将第一列和第一行作为输入 我希望收到关于优化以下代码的建议: #导入 将numpy作为np导入 作为pd进口熊猫 #核型变异体 #样本矩阵的创建 x_范围=范围(-180,-80,20) y_范围=范围(5,30,5) ma=np.零(形状=(6,6)) ma[0,1:]=x_范围 ma[1:0]=y_范围 ma[0,0]=np.nan #测试功能: def测试函数(x,y): z=(x+y)/10 返回z #循环 对于范围(1,len(ma[0,:])内的y:

我想使用单独的函数计算矩阵值,并将第一列和第一行作为输入

我希望收到关于优化以下代码的建议:

#导入
将numpy作为np导入
作为pd进口熊猫
#核型变异体
#样本矩阵的创建
x_范围=范围(-180,-80,20)
y_范围=范围(5,30,5)
ma=np.零(形状=(6,6))
ma[0,1:]=x_范围
ma[1:0]=y_范围
ma[0,0]=np.nan
#测试功能:
def测试函数(x,y):
z=(x+y)/10
返回z
#循环
对于范围(1,len(ma[0,:])内的y:
对于范围(1,len(ma[:,0]))内的x:
#打印ma[0,x],ma[y,0]
ma[x,y]=测试函数(ma[0,x],ma[y,0])
文科硕士
数组([[nan,-180.,-160.,-140.,-120.,-100.],
[   5. ,  -17.5,  -17. ,  -16.5,  -16. ,  -15.5],
[  10. ,  -15.5,  -15. ,  -14.5,  -14. ,  -13.5],
[  15. ,  -13.5,  -13. ,  -12.5,  -12. ,  -11.5],
[  20. ,  -11.5,  -11. ,  -10.5,  -10. ,   -9.5],
[  25. ,   -9.5,   -9. ,   -8.5,   -8. ,   -7.5]])
#熊猫变种
cols=x_范围
idx=y_范围
#数据帧
df=pd.DataFrame(np.zeros(shape=(5,5)),index=idx,columns=cols)
df.index.name='Y-Range'
df.columns.name='X-Range'
df
X范围-180-160-140-120-100
Y范围
5           0     0     0     0     0
10          0     0     0     0     0
15          0     0     0     0     0
20          0     0     0     0     0
25          0     0     0     0     0
#循环
对于范围(0)中的列(len(df.columns)):
对于范围(0)内的ind(len(df.index)):
df.iloc[ind,col]=测试函数(df.index[ind],df.columns[col])
df
X范围-180-160-140-120-100
Y范围
5         -18   -16   -14   -12   -10
10        -17   -15   -13   -11    -9
15        -17   -15   -13   -11    -9
20        -16   -14   -12   -10    -8
25        -16   -14   -12   -10    -8
#由于控制台设置而舍入
这正是我想要的

但有没有更好的方法,更有效,避免循环

注: 感谢回复。

您可以使用和:


设置
ma
后,您可以通过扩展其中一个切片部分的维度来替换向量化方法的嵌套循环:
ma[0,1://code>,并添加另一个切片
ma[1:,0]
,这将发挥作用。作为一种矢量化方法,这必须非常快。因此,循环替换将如下所示-

ma[1:,1:] = ma[0,1:][:,None] + ma[1:,0]

请注意,编写
ma[0,1::[:,None]
的更简洁的方法是
ma[0,1:,None]

如果您实现了一个循环版本,请将其添加到问题中?建议的最终输出是什么?编辑之前-
ma[1,2]/10=-15.5
编辑
ma[1,2]=-17
。对吗?
ma[1:,1:] = ma[0,1:][:,None] + ma[1:,0]