Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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中的矩阵是否只有1和0?_Python_Arrays_Numpy_Matrix_Linear Algebra - Fatal编程技术网

如何测试Python中的矩阵是否只有1和0?

如何测试Python中的矩阵是否只有1和0?,python,arrays,numpy,matrix,linear-algebra,Python,Arrays,Numpy,Matrix,Linear Algebra,假设我有这样一个矩阵: mat1 = np.array([1,0,1], [1,1,0], [0,0,0]); mat2 = np.array([0,1,0], [0,0,1], [1,1,1]); [1,0,0,0,0,0,1,1,0] ---> {0,1} 我还有一个这样的: mat1 = np.array([1,0,1], [1,1,0], [0,0,0]); mat2 = np.array([0,1,0], [0,0,1], [1,1,1]); [1,0,0,0,0,0,

假设我有这样一个矩阵:

mat1 = np.array([1,0,1], [1,1,0], [0,0,0]);
mat2 = np.array([0,1,0], [0,0,1], [1,1,1]);
[1,0,0,0,0,0,1,1,0] ---> {0,1}
我还有一个这样的:

mat1 = np.array([1,0,1], [1,1,0], [0,0,0]);
mat2 = np.array([0,1,0], [0,0,1], [1,1,1]);
[1,0,0,0,0,0,1,1,0] ---> {0,1}
我想检测一下

np.add(mat1, mat2);
只有1或0,即一些1和一些0、全部0或全部1

n、 注释你的代码。

使用:

所有0:np.allmat==0 全部1:np.allmat==1 一些0:np.anymat==0 some 1:np.anymat==1 更新

要检查数组是否仅包含1或0,而不包含其他内容,请使用以下命令:

>>> mat1 = np.array([[1,0,1], [1,1,0], [0,0,0]])
>>> mat2 = np.array([[0,1,2], [3,4,5], [6,7,8]])
>>> np.all((mat1 == 0) | (mat1 == 1))
True
>>> np.all((mat2 == 0) | (mat2 == 1))
False
np.sum(np.unique(mat0.ravel())) > 1
简单地说:

In [6]:

set((mat1+mat2).ravel()).issubset(set((1,0)))
Out[6]:
True

In [7]:

mat3 = np.array([[0,5,0], [0,0,1], [1,1,1]])
set((mat1+mat3).ravel()).issubset(set((1,0)))
Out[7]:
False
这个怎么样:

>>> def check(matrix):
...     # flatten up the matrix into one single list
...     # and set on the list it should be [0,1] if it
...     # contains only 0 and 1. Then do sum on that will 
...     # return 1
...     if sum(set(sum(matrix,[]))) > 1:
...         return False
...     return True
...
>>>
>>> check([[1,0,1], [1,1,0], [0,0,0]])
True
>>> check([[1,0,1], [1,1,0], [0,0,2]])
False
>>> check([[1,0,1], [1,1,0], [0,0,3]])
False
>>>
如果您知道它是int-dtype,那么令人惊讶的是,即使没有:

你可以用

你也可以使用

看看这个:np.sumnp.uniquemat0.ravel

因此,mat0.ravel这样做:

[[1,0,0],[0,0,0],[1,1,0]] ---> [1,0,0,0,0,0,1,1,0]
这个新对象是一个数组,即上面的[1,0,0,0,0,1,1,0]对象。现在,np.uniquemat0.ravel找到所有唯一的元素并对它们进行排序,然后将它们放入一个集合中,如下所示:

mat1 = np.array([1,0,1], [1,1,0], [0,0,0]);
mat2 = np.array([0,1,0], [0,0,1], [1,1,1]);
[1,0,0,0,0,0,1,1,0] ---> {0,1}
从这里,如果我们将np.sumnp.uniquemat0.ravel应用于此,即np.sumnp.uniquemat0.ravel,我们得到集合内容的和,因此检查矩阵中每个单元格中是否只有0或1的一个好条件如下:

>>> mat1 = np.array([[1,0,1], [1,1,0], [0,0,0]])
>>> mat2 = np.array([[0,1,2], [3,4,5], [6,7,8]])
>>> np.all((mat1 == 0) | (mat1 == 1))
True
>>> np.all((mat2 == 0) | (mat2 == 1))
False
np.sum(np.unique(mat0.ravel())) > 1

n、 b.-这只适用于非负整数。

你能解释一下这意味着什么吗?@user3333975,我添加了一个例子,我希望这是有意义的。我的意思是,如果我添加它们,除了一个之外,所有的都是0,而其余的都是1呢?我还没有理解。@user3333975,mat1==0返回由True和False项组成的数组。仅当所有项均为True时,numpy.all才返回True。numpy.any如果有任何True,则返回。@user3333975,让我们将添加的数组作为调用,它包含8个1和1个0作为项。numpy.alla==0==False,numpy.alla==1==False,numpy.anya==0==True,numpy.anya==1==True。将mat1和mat2相加,ravel意味着返回展开视图1维度。然后我们就出发了。当结果数组的集合为set1、set1,0或set0时,结果集是set1,0的子集,这意味着结果数组只有1和0。请参阅添加的新示例。如果您使用Python 2.7+或3.1+,则可以使用集合文字:{1,0}而不是set1,0。是的,确切地说是@falsetru,实际上我使用的是2.7.6,但只是认为老式的方式可能更容易理解。注意:如果min不是0,则会短路。非常好。如果它不是int-dtype,那么在使用等式运算符时也会遇到问题,就像在所有其他答案中一样。注意:np.unique排序,这不是一个问题,尽管它已经比top-soln慢,但是如果它有很多项。仅供参考,pandas-unique函数与numpy完全相同,但没有排序。您能对代码进行注释吗?这里发生了什么?嘿,顺便说一句,我怎样才能使一个矩阵像mat0=np。数组[[1,2,3],[4,5,6],[7,8,9]]展平成一个像arr0=np的数组。数组[1,2,3,4,5,6,7,8,9]?这就是你的代码吗?我想我明白了。那很聪明。。。我可以修改您现有的集合代码,以便对上面的矩阵到数组注释执行我想要的操作吗?我有一个更好的注释:sumsetmat0.ravelThis没有使用numpy,因此waaaay会更慢。