对于每个长度为n + h-1的数组,其值为0和1,我想检查是否存在另一个长度为n的非零数组,其值为-1,0,1,以便所有h内部产品都是零.我天真的做法是
import numpy as np
import itertools
(n,h)= 4,3
for longtuple in itertools.product([0,1], repeat = n+h-1):
bad = 0
for v in itertools.product([-1,0,1], repeat = n):
if not any(v):
continue
if (not np.correlate(v, longtuple, 'valid').any()):
bad = 1
break
if (bad == 0):
print "Good"
print longtuple
Run Code Online (Sandbox Code Playgroud)
如果我们设置n = 19,这是非常慢的,h = 10这是我想要测试的.
我的目标是找到一个长度单一的"好"数组
n+h-1.有没有办法加快这让n = 19和h = 10是否可行?
当前的朴素方法需要2 ^(n + h-1)3 ^(n)次迭代,每次迭代大约需要n次.这是311,992,186,885,373,952次迭代n = 19,h = …
我正在尝试解决一组形式为Ax = 0的方程式.A是已知的6x6矩阵,我使用SVD编写了下面的代码,以获得在某种程度上起作用的向量x.答案大致正确,但不足以对我有用,我怎样才能提高计算的精确度?降低低于1.e-4的eps会导致功能失败.
from numpy.linalg import *
from numpy import *
A = matrix([[0.624010149127497 ,0.020915658603923 ,0.838082638087629 ,62.0778180312547 ,-0.336 ,0],
[0.669649399820597 ,0.344105317421833 ,0.0543868015800246 ,49.0194290212841 ,-0.267 ,0],
[0.473153758252885 ,0.366893577716959 ,0.924972565581684 ,186.071352614705 ,-1 ,0],
[0.0759305208803158 ,0.356365401030535 ,0.126682113674883 ,175.292109352674 ,0 ,-5.201],
[0.91160934274653 ,0.32447818779582 ,0.741382053883291 ,0.11536775372698 ,0 ,-0.034],
[0.480860406786873 ,0.903499596111067 ,0.542581424762866 ,32.782593418975 ,0 ,-1]])
def null(A, eps=1e-3):
u,s,vh = svd(A,full_matrices=1,compute_uv=1)
null_space = compress(s <= eps, vh, axis=0)
return null_space.T
NS = null(A)
print "Null space equals ",NS,"\n"
print dot(A,NS)
Run Code Online (Sandbox Code Playgroud) 必须有一种简单的方法来获得python的numpy或scipy中的小(例如3x3)矩阵的零空间.
MATLAB可以很好地解决这个问题.让我们说:
A = [1 2 3;
2 3 4;
2 4 6]
rank(A) % rank is 2
null(A, 'r') % ask matlab to be ('r') reasonable about
% its choice of a vector in A's nullspace
Run Code Online (Sandbox Code Playgroud)
并且最后一个命令的输出是:
1
-2
1
Run Code Online (Sandbox Code Playgroud)
它似乎 - 这是真的吗? - 在numpy中,事情并不那么简单:
import numpy as np
A = array(([1, 2, 3], [2, 3, 4], [2, 4, 6]))
np.linalg.matrix_rank(A) # ok, getting the rank of a matrix is this esay, even if
# it takes more keystrokes, …Run Code Online (Sandbox Code Playgroud) 我在网上找到了一些示例,展示了如何在Python中找到常规矩阵的零空间,但我找不到稀疏矩阵(scipy.sparse.csr_matrix)的任何示例.
零空间是指x使得M·x = 0,其中' · '是矩阵乘法.有人知道怎么做这个吗?
此外,在我的情况下,我知道零空间将由单个向量组成.这些信息可以用来提高方法的效率吗?