Python 3.x 如何用逻辑符号分割矩阵?

Python 3.x 如何用逻辑符号分割矩阵?,python-3.x,numpy,Python 3.x,Numpy,我可以将以下代码应用于数组 from numpy import * A = eye(4) A[A[:,1] > 0.5,:] 但是我怎样才能将类似的方法应用到垫子上呢 A = mat(eye(4)) A[A[:,1] > 0.5,:] 我知道上面的代码是错误的,但是我应该怎么做呢?问题是,当A是numpy.matrix时,A[:,1]返回一个二维矩阵,因此A[:,1]>0.5也就是二维矩阵。当A是ndarray时,任何使此表达式看起来与创建的表达式相同的东西都可以工作。例如,您可

我可以将以下代码应用于数组

from numpy import *
A = eye(4)
A[A[:,1] > 0.5,:]
但是我怎样才能将类似的方法应用到垫子上呢

A = mat(eye(4))
A[A[:,1] > 0.5,:]

我知道上面的代码是错误的,但是我应该怎么做呢?

问题是,当
A
numpy.matrix
时,
A[:,1]
返回一个二维矩阵,因此
A[:,1]>0.5也就是二维矩阵。当
A
ndarray
时,任何使此表达式看起来与创建的表达式相同的东西都可以工作。例如,您可以编写
A.A[:,1]>0.5
.A
属性返回矩阵的
ndarray
视图),或
(A[:,1]>0.5).A1
A1
属性返回展平
ndarray

比如说,

In [119]: A
Out[119]: 
matrix([[ 1.,  0.,  0.,  0.],
        [ 0.,  1.,  0.,  0.],
        [ 0.,  0.,  1.,  0.],
        [ 0.,  0.,  0.,  1.]])

In [120]: A[(A[:, 1] > 0.5).A1,:]
Out[120]: matrix([[ 0.,  1.,  0.,  0.]])

In [121]: A[A.A[:, 1] > 0.5,:]
Out[121]: matrix([[ 0.,  1.,  0.,  0.]])


由于这些怪癖,我(和许多其他人)建议避免使用
numpy.matrix
类。大多数代码都可以通过自始至终使用
ndarray
来轻松编写。

问题是,当
A
是一个
numpy.matrix
时,
A[:,1]
返回一个二维矩阵,因此
A[:,1]>0.5也就是二维矩阵。当
A
ndarray
时,任何使此表达式看起来与创建的表达式相同的东西都可以工作。例如,您可以编写
A.A[:,1]>0.5
.A
属性返回矩阵的
ndarray
视图),或
(A[:,1]>0.5).A1
A1
属性返回展平
ndarray

比如说,

In [119]: A
Out[119]: 
matrix([[ 1.,  0.,  0.,  0.],
        [ 0.,  1.,  0.,  0.],
        [ 0.,  0.,  1.,  0.],
        [ 0.,  0.,  0.,  1.]])

In [120]: A[(A[:, 1] > 0.5).A1,:]
Out[120]: matrix([[ 0.,  1.,  0.,  0.]])

In [121]: A[A.A[:, 1] > 0.5,:]
Out[121]: matrix([[ 0.,  1.,  0.,  0.]])


由于这些怪癖,我(和许多其他人)建议避免使用
numpy.matrix
类。大多数代码都可以通过自始至终使用
ndarray
s轻松编写。

谢谢。您的方法在选择行向量时效果很好。但是,如果我不想先转置矩阵,然后应用上述方法,那么选择列向量怎么样?谢谢。您的方法在选择行向量时效果很好。但是,如果我不想先转置矩阵,然后应用上面的方法,那么选择列向量怎么样?