NumpyでのNdarray操作
問題
特定の条件を満たすデータを操作したい場合はどうすればよいですか?
1論理演算
# 生成10名同学,5门功课的数据
>>> score = np.random.randint(40, 100, (10, 5))
# 取出最后4名同学的成绩,用于逻辑判断
>>> test_score = score[6:, 0:5]
# 逻辑判断, 如果成绩大于60就标记为True 否则为False
>>> test_score > 60
array([[ True, True, True, False, True],
[ True, True, True, False, True],
[ True, True, False, False, True],
[False, True, True, True, True]])
# BOOL赋值, 将满足条件的设置为指定的值-布尔索引
>>> test_score[test_score > 60] = 1
>>> test_score
array([[ 1, 1, 1, 52, 1],
[ 1, 1, 1, 59, 1],
[ 1, 1, 44, 44, 1],
[59, 1, 1, 1, 1]])
[配列は論理演算を比較できますが、リストはできません]
2一般的な判断機能
- np.all()
# 判断前两名同学的成绩[0:2, :]是否全及格
>>> np.all(score[0:2, :] > 60)
False
- np.any()
# 判断前两名同学的成绩[0:2, :]是否有大于90分的
>>> np.any(score[0:2, :] > 80)
True
3 np.where(三項演算子)
np.whereを使用すると、より複雑な計算を実行できます。
- np.where()
# 判断前四名学生,前四门课程中,成绩中大于60的置为1,否则为0
temp = score[:4, :4]
np.where(temp > 60, 1, 0)
- 複合ロジックは、np.logical_andおよびnp.logical_orと組み合わせて使用する必要があります
# 判断前四名学生,前四门课程中,成绩中大于60且小于90的换为1,否则为0
np.where(np.logical_and(temp > 60, temp < 90), 1, 0)
# 判断前四名学生,前四门课程中,成绩中大于90或小于60的换为1,否则为0
np.where(np.logical_or(temp > 90, temp < 60), 1, 0)
4統計演算
学生のスコアが最も高いスコアを知りたい場合、またはスコアを小さくしたい場合はどうすればよいですか?
4.1統計指標
データマイニング/機械学習の分野では、統計的指標の値も問題を分析する方法です。一般的に使用される指標は次のとおりです。
- 最小(a、軸)
- 配列の最小値または軸に沿った最小値を返します。
- max(a、axis])
- 配列の最大値または軸に沿った最大値を返します。
- median(a, axis) 【中位数】
- 指定された軸に沿って中央値を計算します。
- mean(a、axis、dtype)
- 指定された軸に沿って算術平均を計算します。
- std(a、axis、dtype) 【標準偏差】
- 指定された軸に沿った標準偏差を計算します。
- var(a、axis、dtype) 【分散】
- 指定された軸に沿った分散を計算します。
4.2ケース:生徒の成績の統計計算
統計を実行する場合、軸軸の値は必ずしも同じではありません。NumpyのさまざまなAPI軸の値は異なります。ここで、軸0は列を表し、軸1は統計の行を表します。
# 接下来对于前四名学生,进行一些统计运算
# 指定列 去统计
temp = score[:4, 0:5]
print("前四名学生,各科成绩的最大分:{}".format(np.max(temp, axis=0)))
print("前四名学生,各科成绩的最小分:{}".format(np.min(temp, axis=0)))
print("前四名学生,各科成绩波动情况:{}".format(np.std(temp, axis=0)))
print("前四名学生,各科成绩的平均分:{}".format(np.mean(temp, axis=0)))
結果:
どの学生が特定の科目で最高のスコアに対応するかを把握する必要がある場合は?
- np.argmax(temp、axis =)【最大添え字 】
- np.argmin(temp、axis =) [最小添え字]
- [次のように書くことができます:temp.argmax(axis = 1)]
print("前四名学生,各科成绩最高分对应的学生下标:{}".format(np.argmax(temp, axis=0)))
結果:
5まとめ
- 論理演算
- より大きいおよびより小さいの直接判断
- 適切な後、値を直接割り当てることができます
- 一般的な判断機能
- np.all()
- np.any()
- 統計計算
- np.max()
- 例:min()
- np.median()
- np.mean()
- 例:std()
- np.var()
- np.argmax(axis =)—最大の要素に対応するインデックス
- np.argmin(axis =)—最小の要素に対応するインデックス