我试图用逻辑索引提取一个子数组,

a = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]])
a
Out[45]: 
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12],
       [13, 14, 15, 16]])
b = np.array([False, True, False, True])
a[b, b]
Out[49]: array([ 6, 16])

python根据a的每个元素计算b中的逻辑索引

>> a = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]

a =

     1     2     3     4
     5     6     7     8
     9    10    11    12
    13    14    15    16

>> b = [2 4]

b =

     2     4

>> a(b, b)

ans =

     6     8
    14    16

我怎样才能在python中实现同样的结果,而不是,

c = a[:, b]
c[b,:]
Out[51]: 
array([[ 6,  8],
       [14, 16]])

推荐答案

Numpy支持逻辑索引,尽管它与您在MATLAB中熟悉的有些不同.要获得想要的结果,可以执行以下操作:

a[b][:,b]  # first brackets isolates the rows, second brackets isolate the columns
Out[27]: 
array([[ 6,  8],
       [14, 16]])

在你理解了你的情况之后,更多的"numpy"方法就会被理解.

a[[[1,1],[3,3]],[[1,3],[1,3]]]
Out[28]: 
array([[ 6,  8],
       [14, 16]])

Explanation:

索引数组包括:

temp_rows = np.array([[1,1],
                      [3,3]])
temp_cols = np.array([[1,3],
                      [1,3])

两个数组的维数都为(2,2),因此,numpy将创建一个shape(2,2)的输出.然后,它在位置[0,0]中放置a[1,1],在位置[0,1]中放置a[1,3],在位置[1,0]中放置a[3,1],在位置[1,1]中放置a[3,3].这可以扩展到任何形状,但出于您的目的,您需要(2,2)的形状

弄明白这一点后,你可以利用这样一个事实,让事情变得更简单:如果你在第1维插入一个(2,1)数组,在第2维插入一个(1,2)数组,numpy将执行广播,类似于MATLAB操作.这意味着通过使用:

temp_rows = np.array([[1],[3]])
temp_cols = np.array([1,3])

你可以做:

a[[[1],[3]], [1,3])
Out[29]: 
array([[ 6,  8],
       [14, 16]])

Python相关问答推荐

在pandas DataFrame上运行apply()时如何访问DateTime索引?

在for循环中保存和删除收件箱

OdooElectron 商务产品详情页面中add_qty参数动态更新

在Python中添加期货之间的延迟

云上Gunicorn的Flask-socketIO无法工作

telegram 机器人API setMyName不起作用

请从Python访问kivy子部件的功能需要帮助

由于瓶颈,Python代码执行太慢-寻求性能优化

在上下文管理器中更改异常类型

如何使用SubProcess/Shell从Python脚本中调用具有几个带有html标签的参数的Perl脚本?

使用polars .滤镜进行切片速度比pandas .loc慢

时间序列分解

为什么带有dropna=False的groupby会阻止后续的MultiIndex.dropna()工作?

scikit-learn导入无法导入名称METRIC_MAPPING64'

将输入管道传输到正在运行的Python脚本中

Julia CSV for Python中的等效性Pandas index_col参数

可以bcrypts AES—256 GCM加密损坏ZIP文件吗?

从列表中获取n个元素,其中list [i][0]== value''

如何获取Python synsets列表的第一个内容?

使用Openpyxl从Excel中的折线图更改图表样式