2015-08-22 274 views
1

我想实现一个自定义公式,用于根据某些数学公式生成一个相等大小的矩阵(具有自定义行数和列数)。我坚持将不等矩阵的值存储到我的输出矩阵中,这需要具有相同的尺寸(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输出仅存储从XY矩阵中的“VAL”变量的最后一个值,而不是相应的值。 编辑:例如: 说我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

你是如何映射值从xy矩阵到h矩阵?可以向你展示xy矩阵的例子和基于xy矩阵的h应该是什么样子? –

+0

我编辑了我的主帖。 – Litwos

回答

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循环的每个迭代 -

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 
+0

你能否用最新的代码更新这个问题? –

+0

我更新了问题。 – Litwos

+0

使用我给出的确切的最新代码,你仍然有嵌套循环,这不会工作,因为我已经解释 –