python - 不对称切片python

标签 python numpy vectorization slice dask

考虑以下矩阵:

X = np.arange(9).reshape(3,3)
     array([[0, 1, 2],
            [3, 4, 5],
            [6, 7, 8]]) 

假设我想对以下数组进行子集化

array([[0, 4, 2],
       [3, 7, 5]])

可以对行和列进行一些索引,例如

col=[0,1,2] 
row = [[0,1],[1,2],[0,1]]

然后,如果我将结果存储在一个变量数组中,我可以使用以下代码来完成:

array=np.zeros([2,3],dtype='int64')
for i in range(3):
    array[:,i]=X[row[i],col[i]]

有没有办法广播这种操作?我必须将此作为大文件 ~ 5 Gb 的数据清理阶段,我想使用 dask 来并行化它。但在第一次,如果我能避免使用 for 循环,我会感觉很棒。

最佳答案

对于带有 NumPy's advanced-indexing 的数组, 这将是 -

X[row, np.asarray(col)[:,None]].T

sample 运行-

In [9]: X
Out[9]: 
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

In [10]: col=[0,1,2] 
    ...: row = [[0,1],[1,2],[0,1]]

In [11]: X[row, np.asarray(col)[:,None]].T
Out[11]: 
array([[0, 4, 2],
       [3, 7, 5]])

关于python - 不对称切片python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49599533/

相关文章:

python - 在 python 函数中定义常量的最佳方式

python - 选择要使用的实例方法

python - 如何让 Python 控制台访问 vim 模块

python - Numpy:沿轴应用具有不同索引的输入数组

Python 加速 np.unique

MATLAB:创建具有相同重复 block 的 block 对角矩阵

python - 如何在 python 中通过 udp (DTLS) 套接字实现 http/3 协议(protocol)?

python - 找到无穷大值并替换为 numpy 数组中每个向量的最大值

python - 如何使用numpy在for循环中向量化矩阵和?

matlab - 如何从该 matlab 代码中删除循环