将多个切片传递给 numpy 数组

R W*_*ser 1 python arrays numpy

我有一个 2D NumPy 数组。我想切出不等长度的列子集,并将它们放入一个数组中,其余值由 填充nan。也就是说在:

data = np.random.normal(size=(100,4))
Run Code Online (Sandbox Code Playgroud)

我想从头到尾建立索引[75, 33, 42, 54]。也就是说,行索引从 75 到第 0 列的末尾,第 33 行到第 1 列的末尾,依此类推。

我尝试过data[[slice(75,100),slice(33,100)],:],但没有成功。

Nin*_*n17 6

您可以通过创建一个掩码来完成此操作,其中包含True您想要的索引np.nanFalse否则:

import numpy as np
data = np.random.normal(size=(5,4))
b = np.array([0, 1, 2, 3])
mask = np.arange(len(data))[:, None] < b
data[mask] = np.nan
data
Run Code Online (Sandbox Code Playgroud)

输出:

 array([[-0.53306108,         nan,         nan,         nan],
       [ 1.32282687,  0.83204007,         nan,         nan],
       [-1.07143908,  0.12972517, -0.4783274 ,         nan],
       [ 0.39686727, -1.20532247, -2.17043218,  0.74859079],
       [ 1.82548696,  0.98669461, -1.17961517, -0.7813723 ]])
Run Code Online (Sandbox Code Playgroud)