numpy 数组列表中的布尔 numpy 数组列表

List of boolean numpy arrays from list of numpy arrays

考虑一个 np 数组列表,x,具有任意长度和任意列数。例如:

import numpy as np
np.random.seed(0)
random = np.random.randint(0,3,100)    
x = [random[0:20].reshape(10,2), random[20:30].reshape(10,1), random[30:60].reshape(10,3), random[60:70].reshape(10,1), random[70:90].reshape(10,2), random[90:100].reshape(10,1)]

从 x,我想创建一个列表,其中包含列表 x 中的对象数,作为具有总列长度的布尔数组

y = [np.array([True, True, False, False, False, False, False, False, False, False]), 
np.array([False, False, True, False, False, False, False, False, False, False]),
np.array([False, False, False, True, True, True, False, False, False, False]),
np.array([False, False, False, False, False, False, True, False, False, False]),
np.array([False, False, False, False, False, False, False, True, True, False]),
np.array([False, False, False, False, False, False, False, False, False, True])]

所以

X = np.concatenate(x, axis = 1)
(x[0] == X[:,y[0]]).all()
True

您可以对 x 中的列数使用累加和。然后,您的 y 是用

创建的
xc = [0, *np.cumsum([i.shape[1] for i in x])]
y = [np.asarray([q >= xc[n] and q < xc[n+1] for q in range(xc[-1])]) for n in range(len(x))]

这只是检查从 0 到您的总列数(累积和的最后一个条目)的每个值 q,如果它位于累积和的两个条目之间。