我一直在尝试编写一些代码,根据以下标准从我的2d数组中删除行:
- 每个单独的条目,因此没有患者只有一个条目(数组中同一患者的每一个条目的矩阵索引向上跳1)
- 第4条以上的所有条目。
如果满足这些条件中的任何一个,np.delete应该删除当前正在迭代的行(即索引的第i行)。
np.delete的输入是数组arr,行索引i和轴0(如果我没记错的话是行),映射到一个新数组new_arr。
从输出中可以看出,我的条件没有满足。例如,数组中的第4个人(Alex Maier)应该不再存在(作为一个单独的条目)。
非常感谢你的帮助。
代码(非常低效)如下:
#remove single entries
i = 0
for i in range(n-1):
if arr[i][5] == 1:
if arr[i+1][5] == 1:
new_arr = np.delete(arr, i, axis = 0)
i = i+1
if arr[i][5]!=1:
if arr[i][5] >4:
new_arr = np.delete(arr, i , axis = 0)
i = i+1
else:
i = i+1
代码输出数组
检查下一个循环迭代开始时new_arr
发生了什么。
# creating bool arrays with the intended logic
lessThan5 = arr[:,5]<5
singleEntry = np.diff(arr[:,5],append=[1])!=0
# using np.where to filter
keepers = np.where(np.logical_and(lessThan5, singleEntry))
# index and save to new array
filtered_arr = arr[keepers[0],:]