要根据多个条件从Numpy数组中删除行,可以使用以下步骤:
- 首先,导入numpy库:
import numpy as np
- 创建一个包含多个条件的布尔型索引数组。例如,我们想要从以下数组中删除所有生命值小于50或攻击力小于20的角色:
array = np.array([
[1, 'Warrior', 80, 50],
[2, 'Mage', 60, 80],
[3, 'Hunter', 90, 10],
[4, 'Paladin', 70, 30],
[5, 'Rogue', 50, 15]
])
我们可以使用如下代码创建一个布尔型索引数组:
mask = (array[:, 2] >= 50) & (array[:, 3] >= 20)
这里,我们使用了一个逻辑与运算符(&)来链接两个条件。 ‘&’ 运算符按位进行运算,两个操作数的位中只要有一个为0,则该位的结果就是0;否则就是1。这样,就保证了组成布尔值的任一条件都要被满足时,mask数组才为True。
- 接下来,我们可以使用布尔型索引数组过滤原始数组。我们可以在原始数组上使用如下代码:
new_array = array[mask]
这个新的数组就是满足我们所有条件的数组了。
完整示例1:
import numpy as np
array = np.array([
[1, 'Warrior', 80, 50],
[2, 'Mage', 60, 80],
[3, 'Hunter', 90, 10],
[4, 'Paladin', 70, 30],
[5, 'Rogue', 50, 15]
])
mask = (array[:, 2] >= 50) & (array[:, 3] >= 20)
new_array = array[mask]
print(new_array)
输出结果:
[[1 'Warrior' 80 50]
[2 'Mage' 60 80]
[4 'Paladin' 70 30]]
完整示例2:
另一个例子是在条件数组上使用逻辑或运算符(|)的情况。 假设我们想要从以下数组中删除所有生命值小于50并且攻击力小于20的角色以及所有生命值大于80的角色:
array = np.array([
[1, 'Warrior', 80, 50],
[2, 'Mage', 60, 80],
[3, 'Hunter', 90, 10],
[4, 'Paladin', 70, 30],
[5, 'Rogue', 50, 15]
])
可以使用以下代码来创建一个布尔型索引数组:
mask = ((array[:, 2] >= 50) & (array[:, 3] >= 20)) | (array[:, 2] <= 80)
这里,我们使用了一个逻辑或运算符来连接两个条件。 ‘|’运算符会将两个操作数的位中任意一位上的值为1,则该位的结果就是1;否则就是0。这样就保证了 符合组成布尔值的任何一个条件就可以更新mask数组为True。
接下来,我们可以使用如下代码过滤原始数组:
new_array = array[mask]
完整示例2:
import numpy as np
array = np.array([
[1, 'Warrior', 80, 50],
[2, 'Mage', 60, 80],
[3, 'Hunter', 90, 10],
[4, 'Paladin', 70, 30],
[5, 'Rogue', 50, 15]
])
mask = ((array[:, 2] >= 50) & (array[:, 3] >= 20)) | (array[:, 2] <= 80)
new_array = array[mask]
print(new_array)
输出结果:
[[1 'Warrior' 80 50]
[2 'Mage' 60 80]
[3 'Hunter' 90 10]
[4 'Paladin' 70 30]
[5 'Rogue' 50 15]]
总之,可以使用布尔型索引数组根据多个条件过滤Numpy数组。 此方法可以很好地扩展到更长的条件列表上,只需要添加更多的 ‘&”|’操作即可。