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,如果它位于累积和的两个条目之间。
考虑一个 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,如果它位于累积和的两个条目之间。