不等于矩阵的相等维度

时间:2015-08-22 09:04:18

标签: python matrix

我正在尝试实现一个自定义公式,用于根据特定的数学公式生成相等大小的矩阵(具有自定义的行数和列数)。我坚持将不等大小矩阵的值存储到我的输出矩阵,它需要具有相同的尺寸(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

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]):