python - 在 numpy 数组中迭代

标签 python python-3.x

我有 3 个 2x2 矩阵:P1、P2 和 P3,它们填充有随机生成的整数。我想确保这些矩阵是正定的(即所有特征值都大于 0)。我的代码如下。

P1 = np.random.randint(10, size=(m,n))
P2 = np.random.randint(10, size=(m,n))
P3 = np.random.randint(10, size=(m,n))
lambda1 = np.linalg.eigvals(P1)
lambda2 = np.linalg.eigvals(P2)
lambda3 = np.linalg.eigvals(P3)
for i in lambda1:  
  if (i <= 0): P1 = np.random.randint(10, size=(m,n))
for i in lambda2:
  if (i <= 0): P2 = np.random.randint(10, size=(m,n))
for i in lambda3:
  if (i <= 0): P3 = np.random.randint(10, size=(m,n))
print('Eigenvalue output to to verify that matrices are positive definite:\n')
print(u'\u03BB(P\u2081) = '  + str(np.linalg.eigvals(P1)))
print(u'\u03BB(P\u2082) = '  + str(np.linalg.eigvals(P2)))
print(u'\u03BB(P\u2083) = '  + str(np.linalg.eigvals(P3)))

现在,如果特征值不为正,if 语句几乎会重新生成矩阵一次或两次,但它不会验证特征值是否始终为正。我的第一个猜测是在 for 循环中嵌套一个 while 循环,但我无法找到一种方法来让它工作,而且我不确定这是否是最有效的方法。

最佳答案

此函数创建一个具有正特征值的数组:

def create_arr_with_pos_ev(m,n):
    ev = np.array([-1,-1])
    while not all(ev>0):
        arr = np.random.randint(10, size=(m,n))
        ev = np.linalg.eigvals(arr)
    return arr, ev

首先,我定义低于 0 的虚拟特征值。然后创建一个新数组并计算其特征值。如果存在负特征值(while not all(ev>0)),则创建一个新特征值。

关于python - 在 numpy 数组中迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53134082/

相关文章:

Python - 编辑本地 HTML 文件 - 我应该将所有内容编辑为一个字符串还是逐行编辑为一个数组?

Python:值错误: 'she' 不在列表中

python - 不支持的操作数类型//: 'str' , 'int'

python - 每个服务器前缀

Python在方法内使用tkinter显示变量

Python。更改列表

python - 如何从单个 pandas.apply() 调用形成乘列?

java - 使用选择排序方法对二维数组进行排序并将结果写入文件

performance - 生成器函数(产量)比迭代器类(__next__)快得多

python - 二维列表行中的最后一个元素没有改变