Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy检查解决方案是否存在,以确保每一行都是<;0?_Python_Matrix_Numpy - Fatal编程技术网

Python Numpy检查解决方案是否存在,以确保每一行都是<;0?

Python Numpy检查解决方案是否存在,以确保每一行都是<;0?,python,matrix,numpy,Python,Matrix,Numpy,考虑以下代码 X=np.matrix([[1,-1,1],[-1,0,1]]) print X.T ''' [[ 1 -1] [-1 0] [ 1 1]] ''' 我想检查转置有的地方是否存在解决方案这是您需要的文档: 因此,这意味着在转置时,第一行(通常是第一列)与您的算法一起工作,第二行和第三行则不工作 这是一个任意数量Y的函数,任意大的矩阵: def func(b,*args): a = b.T total = [a[i]*args[i] for i in r

考虑以下代码

X=np.matrix([[1,-1,1],[-1,0,1]])

print X.T
'''
[[ 1 -1]
 [-1  0]
 [ 1  1]]
'''

我想检查转置有的地方是否存在解决方案这是您需要的文档:

因此,这意味着在转置时,第一行(通常是第一列)与您的算法一起工作,第二行和第三行则不工作

这是一个任意数量Y的函数,任意大的矩阵:

def func(b,*args):
    a = b.T
    total = [a[i]*args[i] for i in range(len(args)-1)]
    if sum(total) < 0:
        return True
    else:
        return False
def func(b,*args):
a=b.T
总计=[a[i]*args[i]表示范围内的i(len(args)-1)]
如果总和(总计)<0:
返回真值
其他:
返回错误

你的问题似乎相当于问,包含原点和向量的平面是否延伸到所有坐标都为负的三维空间的八分之一

交叉积UxV(或交叉(U,V))是这个平面的法线。若这个交叉积有三个非零分量,都是相同的符号,那个么它的法线就不会在可怕的八分之一。对于你们的数字,我得到了所有三个分量的负值,所以并没有解决方案

[更新]

通常,法线包含零时会发生棘手的事情:

三个零:你的原始向量是平行的,或者其中一个是零。选择一个不是零的向量,如果所有分量都有相同的符号,那么你就有了一个解决方案

两个零:你的平面是X=0,Z=0,Y=0中的一个。因此一维总是非负的,没有解


一个零:你的平面包括X、Y或Z轴。当且仅当法线的其余两个分量有不同的符号时,才有一个解决方案。

这更适合作为注释。不一致?你的意思是什么?这也不做我需要它做的事。你只是编辑它,使它不再不一致。你有
-1*y1-0*y2<0
这没有意义,但是你修复了它,所以现在我得到了你想要的,我会编辑它现在我编辑了它,因为我知道你的意思,通过一个例子显示它是有效的。有没有一个通用的方法来检查这一点?当我尝试这种方法时,它说如果一件长度为1,交叉方法不起作用,有时它只给我一个True或False与一组真/假值相比,如果长度也大于3,则这也不起作用,例如U=[-1,1,1,-1]V=[0,1,0,-1]叉积仅适用于3向量。其他维度也有推广(阅读相关内容),我怀疑检查结果张量的符号会有所帮助。但我没有详细考虑这个问题。
import numpy as np:
def func(b,y1,y2):
    a = b.T
    if a[0]*y1 + a[1]*y2 < 0:
        return True
    else:
        return False
np.apply_along_axis(func,0,X,y1,y2)
>>> np.apply_along_axis(func,0,X,-1,3)
array([ True, False, False], dtype=bool)
def func(b,*args):
    a = b.T
    total = [a[i]*args[i] for i in range(len(args)-1)]
    if sum(total) < 0:
        return True
    else:
        return False