gpt4 book ai didi

python - 计算第一行第一列输入的数组值

转载 作者:行者123 更新时间:2023-11-30 23:01:34 24 4
gpt4 key购买 nike

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

我想收到有关优化以下代码的建议:

#imports
import numpy as np
import pandas as pd


#numpy variant

#creation of sample matrix
x_range = range(-180, -80, 20)
y_range = range(5, 30, 5)

ma = np.zeros(shape=(6,6))
ma[0,1:] = x_range
ma[1:,0] = y_range
ma[0,0] = np.nan

# test function:
def test_func(x, y):
z = (x + y) / 10

return z

#looping
for y in range(1, len(ma[0,:])):
for x in range(1, len(ma[:,0])):
#print ma[0, x], ma[y, 0]
ma[x, y] = test_func(ma[0, x], ma[y, 0])

ma
array([[ 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]])

#pandas variant

cols = x_range
idx = y_range

#dataframe
df = pd.DataFrame(np.zeros(shape=(5,5)), index=idx, columns=cols)
df.index.name = 'Y-Range'
df.columns.name = 'X-Range'

df
X-Range -180 -160 -140 -120 -100
Y-Range
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


#looping
for col in range(0, (len(df.columns))):
for ind in range(0, (len(df.index))):
df.iloc[ind, col] = test_func(df.index[ind], df.columns[col])

df
X-Range -180 -160 -140 -120 -100
Y-Range
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
#rounding due to console settings

上面这正是我想要的。

但是有没有更好的方法,更高效并且避免循环?

注意:感谢您的回复。

最佳答案

设置 ma 后,您可以通过扩展切片部​​分之一的维度来替换矢量化方法的嵌套循环:ma[0,1:]添加另一个切片ma[1:,0],这将引入 broadcasting进入游戏。作为一种矢量化方法,这必须非常快。因此,循环替换看起来像这样 -

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

请注意,更紧凑的 ma[0,1:][:,None] 编写方式为 ma[0,1:,None]

关于python - 计算第一行第一列输入的数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34893583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com