我正在尝试实现一个自定义公式,用于根据特定的数学公式生成相等大小的矩阵(具有自定义的行数和列数)。我坚持将不等大小矩阵的值存储到我的输出矩阵,它需要具有相同的尺寸(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
答案 0 :(得分:1)
如果你仔细看看你的循环,你当前的问题就会很清楚 -
fieldC
以上实际上完全遍历#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]
中的每个元素只计算最后一个val的原因,因为在嵌套循环中执行所有这些操作时,前一个h
会被覆盖。
你想要的是将i,j完全移出循环,并在循环的每次迭代中递增它们 -
val
示例代码 -
for line in range(h.shape[0]):
for col in range(h.shape[1]):