我们可以使用交互式解释器来找出答案。
In [3]: hyperplanes = np.mat([[0.7071, 0.7071, 1],
...: [-0.7071, 0.7071, 1],
...: [0.7071, -0.7071, 1],
...: [-0.7071, -0.7071, 1]])
请注意,Python 中的行尾不需要分号。
In [4]: hyperplanes
Out[4]:
matrix([[ 0.7071, 0.7071, 1. ],
[-0.7071, 0.7071, 1. ],
[ 0.7071, -0.7071, 1. ],
[-0.7071, -0.7071, 1. ]])
我们得到一个matrix
对象。NumPy 通常使用 an ndarray
(你会用上面的np.array
代替np.mat
),但在这种情况下,无论是矩阵还是ndarray
.
让我们看看a
。
In [7]: hyperplanes[:][:,0:2].T
Out[7]:
matrix([[ 0.7071, -0.7071, 0.7071, -0.7071],
[ 0.7071, 0.7071, -0.7071, -0.7071]])
这个切片有点奇怪。请注意:
In [9]: hyperplanes[:]
Out[9]:
matrix([[ 0.7071, 0.7071, 1. ],
[-0.7071, 0.7071, 1. ],
[ 0.7071, -0.7071, 1. ],
[-0.7071, -0.7071, 1. ]])
In [20]: np.all(hyperplanes == hyperplanes[:])
Out[20]: True
换句话说,你根本不需要[:]
里面。然后,我们剩下hyperplanes[:,0:2].T
. [:,0:2]
可以简化为,这[:,:2]
意味着我们想要获取 中的所有行hyperplanes
,但只获取前两列。
In [14]: hyperplanes[:,:2]
Out[14]:
matrix([[ 0.7071, 0.7071],
[-0.7071, 0.7071],
[ 0.7071, -0.7071],
[-0.7071, -0.7071]])
.T
给我们转置。
In [15]: hyperplanes[:,:2].T
Out[15]:
matrix([[ 0.7071, -0.7071, 0.7071, -0.7071],
[ 0.7071, 0.7071, -0.7071, -0.7071]])
最后,b = hyperplanes[:,2]
给了我们所有的行和第二列。换句话说,第 2 列中的所有元素。
In [21]: hyperplanes[:,2]
Out[21]:
matrix([[ 1.],
[ 1.],
[ 1.],
[ 1.]])
由于 Python 是一种解释型语言,因此很容易自己尝试并弄清楚发生了什么。将来,如果您遇到困难,请返回解释器并尝试一下——更改一些数字,取消.T
等。