我进行了一系列实验,当我完成实验时,我意识到一定数量的实验是不可靠的,因此我想删除它们。为此,我决定添加另一个数组status
,其中我要保留的列定义为True
,而我要删除的列表示为False
import numpy as np
data_a = np.arange(1,14)
status = np.array([False, True, False, True, True, True, True, True, True, False, True, True, True])
test = []
for stats, da in zip(status, data_a):
if stats == True:
data_a = da
test.append(data_a)
elif stats == False:
pass
else:
print('Impossible -- in the case of status, there exist only two conditionals (True or False).')
在最简单的情况下,没有问题,并且可以通过提供以下输出来按预期工作:
[2, 4, 5, 6, 7, 8, 9, 11, 12, 13]
但是,我正在处理多个数据集(在此情况下,不仅是一个data_a
)。因此,我决定通过添加两个新数组来使其变得更加困难:
data_b = np.arange(101,114)
data_c = np.arange(1001,1014)
test = []
for datasets in (data_a, data_b, data_c):
for stats, sets in zip(status, datasets):
if stats == True:
datasets = sets
test.append(datasets)
elif stats == False:
pass
else:
print('Impossible -- in the case of status, there exist only two conditionals (True or False).')
这个稍微复杂一点的案例提供了:
[2, 4, 5, 6, 7, 8, 9, 11, 12, 13, 102, 104, 105, 106, 107, 108, 109, 111, 112, 113, 1002, 1004, 1005, 1006, 1007, 1008, 1009, 1011, 1012, 1013]
它确实满足了我的要求,但是我需要做什么才能将data_a
,data_b
和data_c
独立存储为数组?
在最复杂的情况下(对于我的实际工作也很现实),我的数据集实际上是形状为(11,13)
的数组:
data_a = []
data_b = []
data_c = []
for dtlsts in (data_a, data_b, data_c):
for _ in range(11):
dtlsts.append(np.random.randint(0, 10, 13))
data_a = np.array(data_a)
data_b = np.array(data_b)
data_c = np.array(data_c)
因此,我想:
基于状态数组删除列,因此最终得到形状为(11,10)
的数组。
独立存储这些数组(即data_a
,data_b
和data_c
都存储在独立的(11,10)
数组中)。
我身处深水之中,非常感谢您的帮助。谢谢。
答案 0 :(得分:1)
如果我理解这个问题,则可以执行以下操作:
test = [ [] for _ in range(3) ]
for i, state in enumerate(status):
if state:
test[0].append(data_a[i])
test[1].append(data_b[i])
test[2].append(data_c[i])
print(test)
#=> [[2, 4, 5, 6, 7, 8, 9, 11, 12, 13], [102, 104, 105, 106, 107, 108, 109, 111, 112, 113], [1002, 1004, 1005, 1006, 1007, 1008, 1009, 1011, 1012, 1013]]
答案 1 :(得分:1)
要扩展@Andrew的注释,您可以使用这样的布尔掩码对整个列进行索引。
In [120]: data_a = np.arange(1,14)
...: status = np.array([False, True, False, True, True, True, True, True, True, False, True, True, True])
...:
...:
In [121]: data_a
Out[121]: array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13])
In [122]: data_a[status]
Out[122]: array([ 2, 4, 5, 6, 7, 8, 9, 11, 12, 13])
对于二维数组,请调整索引:
In [123]: data_b = np.vstack([data_a,data_a,data_a])
In [124]: data_b[:,status]
Out[124]:
array([[ 2, 4, 5, 6, 7, 8, 9, 11, 12, 13],
[ 2, 4, 5, 6, 7, 8, 9, 11, 12, 13],
[ 2, 4, 5, 6, 7, 8, 9, 11, 12, 13]])