gpt4 book ai didi

python - Numpy(或 Theano)中的切片矩阵

转载 作者:行者123 更新时间:2023-11-28 18:23:56 24 4
gpt4 key购买 nike

在给定每列的起始索引的情况下,是否有一种最佳方法可以将 Numpy(或 Theano)中矩阵的每一行切片 N 步幅?

例如,在下面的矩阵 A 中,每一行的起始切片索引在第一列中给出,对于一行 i,我想要 A[i, A [0]:A[0]+步幅]

A = [[1,  1,  2,  3,  4, 5, 6],
[1, 11, 12, 13, 14, 15, 16],
[3, 22, 23, 24, 25, 26, 27]]
stride = 2
Desired output:
[[ 1. 2. 3.]
[ 11. 12. 13.]
[ 24. 25. 26.]]

我尝试了下面的代码:

b = [range(A.shape[0]), A[:, 0]]
c = [range(A.shape[0]), A[:, 0] + stride]
A[b:c]

但是我得到了以下错误:

IndexError: failed to coerce slice entry of type list to integer

最佳答案

这是一个使用 broadcasting 的向量化方法获取这些索引以索引到每一行的列中,然后使用 NumPy's advanced-indexing以矢量化的方式沿着每一行提取那些元素 -

idx = A[:,0,None] + np.arange(stride+1)
out = A[np.arange(idx.shape[0])[:,None], idx]

sample 运行-

In [273]: A
Out[273]:
array([[ 1, 1, 2, 3, 4, 5, 6],
[ 1, 11, 12, 13, 14, 15, 16],
[ 3, 22, 23, 24, 25, 26, 27]])

In [274]: idx = A[:,0,None] + np.arange(stride+1)

In [275]: idx
Out[275]:
array([[1, 2, 3],
[1, 2, 3],
[3, 4, 5]])

In [276]: A[np.arange(idx.shape[0])[:,None], idx]
Out[276]:
array([[ 1, 2, 3],
[11, 12, 13],
[24, 25, 26]])

关于python - Numpy(或 Theano)中的切片矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42795263/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com