【问题标题】:How to write a loop using Gram_Schmidt formula concept to get the Orthogonol matrix?如何使用 Gram_Schmidt 公式概念编写循环以获取 Orthogonol 矩阵?
【发布时间】:2020-02-11 17:05:30
【问题描述】:

我正在尝试编写一个循环来执行下面“c”矩阵中的公式逻辑以获得我的结果。我有“a”是原始数据矩阵,它是定量的,“b”代表公式c中的系数。矩阵b具有递增的规律,例如

  1. 1
  2. 12
  3. 123
  4. 1234
  5. 12345
a= [np.array([1,2,3]),np.array([4,5,6]),np.array([1,2,7]),np.array([4,2,7])]
b = [np.array([1]),np.array([1,2]),np.array([1,2,3])]
c = [
   a[0],
   a[1]-b[0][0]*a[0], 
   a[2]-b[1][0]*a[0]-b[1][1]*a[1],
   a[3]-b[2][0]*a[0]-b[2][1]*a[1]-b[2][2]*a[2]
    ]

这是一个c矩阵的输出(我需要得到的最终结果,但我想写一个循环来得到这个)

 [array([1, 2, 3]),
 array([3, 3, 3]),
 array([ -8, -10,  -8]),
 array([ -8, -16, -29])]

此外,我尝试编写循环以获得如下结果:

for t in range(len(b)):
    for i in range(1,len(a)+1):
        a[i]-= b[t][i-1]*a[i-1]

但它给了我这个错误信息:

IndexError: index 1 is out of bounds for axis 0 with size 1

那么,我想知道如何编写一个适当的循环来获得我的结果? 感谢您的帮助。

【问题讨论】:

标签: python-3.x loops for-loop


【解决方案1】:

您的IndexError 是因为您使用的是range(len(a)) + 1,这会导致您尝试访问不存在的a[len(a)](数组的最后一个元素总是具有索引len(array) - 1,因为数组从0 开始但长度从 1 开始)

但是,即使修复了索引错误,您也会得到错误的结果,因为您在迭代它的同时进行了更改,而您在静态解决方案中没有这样做。这可以通过对元素进行深度复制来解决。

import copy
for i in range(len(a)):
    c_entry = copy.deepcopy(a[i])
    for j in range(i):
        c_entry -= b[i-1][j] * a[j]
    c.append(c_entry)

【讨论】:

    猜你喜欢
    • 2011-09-26
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 2023-01-17
    • 1970-01-01
    相关资源
    最近更新 更多