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

标签 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

最佳答案

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

#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/

相关文章:

c++ - C++ 中的 Eigen MatrixXd 推回

java - 无法在一维和二维数组值之间转换

C++删除动态矩阵

matlab - 如何创建一个随机矩阵,使所有行总和为 1

c - 如何在 C 中增加指针(二维数组)

python - 按列对 csv 文件进行排序

使用 BOOST 将 python float 转换为 c++ double

Python,在结束后开始一个新行= ""

python - 在没有pypi的情况下安装PIL

python - 如何将两个等长列表转换为表示有序对的嵌套列表列表?