我有一个像这样的矩阵
x = [[a, b],
[c, d]]
但是对于每个值而不是a,b,c,d,都有一个数字列表,例如[x,xx,xxx]。
我想创建另一个矩阵,只有在x == 0&& xx == 0&& XXX == 0。如果没有循环我怎么能这样做?例如,我可以做B = [x == 0],但是如果有列表而不是单个矩阵元素,我怎么能这样做呢?
答案 0 :(得分:1)
如果列表具有固定长度,您可以创建一个3d数组,然后在其最后一个轴上使用np.all()
:
In [1]: import numpy as np
In [2]: a = np.zeros((2, 2, 3)) # 2x2 matrix, 3 variants for each element
In [3]: a[0, 0] = [0, 1, 2] # filling one element of the "matrix"
In [4]: a[0, 1] = 1
In [5]: a[1, 1] = 0 # this
In [6]: a[1, 0] = 0 # and this are "all zeros"
In [7]: a
Out[7]:
array([[[ 0., 1., 2.],
[ 1., 1., 1.]],
[[ 0., 0., 0.],
[ 0., 0., 0.]]])
现在让我们构建矩阵b
:
In [8]: np.all(a == 0, axis=-1).astype(int)
Out[8]:
array([[0, 0],
[1, 1]])
如果您想要其他条件,可以按以下方式修改表达式:
In [9]: np.all(a - [0, 1, 2] == 0, axis=-1).astype(int)
Out[9]:
array([[1, 0],
[0, 0]])