gpt4 book ai didi

python - 矩阵的维度不等于相等

转载 作者:太空宇宙 更新时间:2023-11-03 17:29:05 24 4
gpt4 key购买 nike

我正在尝试根据某些数学公式实现一个自定义公式,用于生成相等大小的矩阵(具有自定义的行数和列数)。我坚持将不等大小矩阵的值存储到输出矩阵,该矩阵需要具有相同的维度(3x3、5x5、9x9 等)。

这是代码:

def mex3():
print "Say input size (d)"
d = int(raw_input("> "))
h = np.empty([d,d], dtype=np.float)
global lx
global ly
global x
global y
lx_list = []
ly_list = []
x_list = []
y_list = []
value = []
b = np.array([0, 0], dtype=np.float)
a = 1
for line in range(h.shape[0]):
for col in range(h.shape[1]):
lx = col - (d - 1)/2
ly = (d - 1)/2 - line
lx_list.append(lx)
ly_list.append(ly)

lam = np.column_stack((lx_list, ly_list))
for i in lx_list:
val = i - b[0]
x_list.append(val)
for j in ly_list:
val = j - b[1]
y_list.append(val)
xy = np.column_stack((lx_list, ly_list))

#This is the part that doesn't work
for line in range(h.shape[0]):
for col in range(h.shape[1]):
for i in xy[0]:
for j in xy[1]:
val = 0
val = (1 - i**2 - j**2) * math.exp(-((i**2)+(j**2))/2)
h[line, col] = val
return h

我的 h 矩阵输出仅存储“val”变量中的最后一个值,而不是 xy 矩阵中的相应值。编辑:例如:假设我的 xy 矩阵具有以下形式:

[[-1.  1.]
[ 0. 1.]
[ 1. 1.]
[-1. 0.]
[ 0. 0.]
[ 1. 0.]
[-1. -1.]
[ 0. -1.]
[ 1. -1.]]

相应的h矩阵应该是这样的:

[[-1.,1.     0.,1.    1.,1.]
[-1.,0., 0.,0., 1.,0.]
[-1.,-1., 0.,-1., 1., -1.]

但请注意,我需要存储来自“val”变量的结果值,而不是 -1,1 对。所以输出应该是这样的:

[[-0.36787944  0.         -0.36787944]
[ 0. 1. 0. ]
[-0.36787944 0. -0.36787944]]

按照答案,我尝试了这个,但不起作用:

global i, j
for line in range(h.shape[0]):
for col in range(h.shape[1]):
i = 0
j = 0
for i in xy[0]:
for j in xy[1]:
val = (1 - i**2 - j**2) * math.exp(-((i**2)+(j**2))/2)
h[line, col] = val
i += 1
j += 1

最佳答案

如果您仔细查看循环,您当前的问题就会很清楚 -

#This is the part that doesn't work
for line in range(h.shape[0]):
for col in range(h.shape[1]):
for i in xy[0]:
for j in xy[1]:

上面实际上完全循环了 xy[0]xy[1] ,根据每个 i,j 计算每个值到您的公式,然后将其设置为 h[line, col] 。这就是为什么对于 h 中的每个元素,它只计算最后一个 val,因为当您在嵌套循环中执行所有这些操作时,前面的 val 会被覆盖。

您想要的是将 i,j 完全移出循环,并为循环的每次迭代递增它们 -

for line in range(h.shape[0]):
for col in range(h.shape[1]):

示例代码 -

i = 0
for line in range(h.shape[0]):
for col in range(h.shape[1]):
val = (1 - xy[i][0]**2 - xy[i][1]**2) * math.exp(-((xy[i][0]**2)+(xy[i][1]**2))/2)
h[line, col] = val
i += 1

关于python - 矩阵的维度不等于相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32154310/

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