机器学习(numpy)练习6

import numpy as np
# 创建一个形状为 (2, 5) 的二维数组 arr,包含正数和负数。
arr=np.array([[20,-33,40,-46,56],[13,25,-17,98,-20]])
# 这行代码的含义是:

# arr > 0:生成一个布尔数组(True/False),其中每个元素表示对应位置的数是否大于0。
# .sum():将布尔数组中的 True 转换为 1,False 转换为 0,然后计算总和,即统计正数的数量。
sum_arr=(arr>0).sum()
print(sum_arr)
6
import numpy as np
arr=np.array([[20,-33,40,-46,56],[13,25,-17,98,-20]])
# arr > 0 生成一个布尔掩码,用于筛选数组中所有大于 0 的元素。
# arr[arr > 0] 提取所有正数。
# .sum() 对提取的正数求和。
sum_arr=arr[arr>0].sum()
print(sum_arr)

sum_assert = 20 + 40 + 56 + 13 +25 +98
print(sum_assert)

252
252
import numpy as np
arr=np.array([[20,-33,40,-46,56],[13,25,-17,98,-20]])
arr_bool=arr>0
# 数组里面有大于0的就算 ture
any_bool=arr_bool.any()
# 数组里面所有的都大于0 算true
all_bool=arr_bool.all()
print(any_bool)
print("-----------------------------")
print(all_bool)
True
-----------------------------
False
red_arr1=[20,30,40,50,60,70,80,90]
red_arr2=[0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9]
bool_arr=[True,False,True,False,True,False,False,True]
red_result=[(red1 if flag else red2)for red1,red2,flag in
zip(red_arr1,red_arr2,bool_arr)]
print(red_result)


# 解释:

# 当bool_arr为True时,选择red_arr1的对应元素。
# 当bool_arr为False时,选择red_arr2的对应元素。

# 具体对应如下:

# 索引0:True → 20
# 索引1:False → 0.3
# 索引2:True → 40
# 索引3:False → 0.5
# 索引4:True → 60
# 索引5:False → 0.7
# 索引6:False → 0.8
# 索引7:True → 90
[20, 0.3, 40, 0.5, 60, 0.7, 0.8, 90]
# 利用NumPy模块的where()解决两个商家发红包大小额问题
import numpy as np

red_arr1 = np.array([20, 30, 40, 50, 60, 70, 80, 90])
red_arr2 = np.array([0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])
bool_arr_a = np.array([True, False, True, False, True, False, False, True])
bool_arr_b = np.array([False, True, False, True, True, False, True, True])

both_true = bool_arr_a & bool_arr_b
print(both_true)

# 如果都为真  就会打印出true 如果不是这种情况为false

either_true = bool_arr_a | bool_arr_b
# 有一个为真打印 打印为true
print(either_true)

sum_arr = red_arr1 + red_arr2
# 两个都为假输出为假

half_sum_arr = sum_arr / 2
# 有一个为真输出(A + B) /2

red_result = np.where(both_true, 0, np.where(either_true, half_sum_arr, sum_arr))

print(red_result)
[False False False False  True False False  True]
[ True  True  True  True  True False  True  True]
[10.1  15.15 20.2  25.25  0.   70.7  40.4   0.  ]
# NumPy模块的concatenate():数组的合并

import numpy as np
man=np.array([[20,21,23],[25,26,27]])
woman=np.array([[23,22,20],[27,28,26]])
# axis=0为按列拼接
all=np.concatenate([man,woman],axis=0)
# 参数axis=1把对应的行元素合并
cope=np.concatenate([man,woman],axis=1)
print(all)
print("------------------")
print(cope)
[[20 21 23]
 [25 26 27]
 [23 22 20]
 [27 28 26]]
------------------
[[20 21 23 23 22 20]
 [25 26 27 27 28 26]]
import numpy as np
cope=np.array([20,21,23,23,22,20,25,26,27,27,28,26])
# 代码中的数组相当于整个部门内的每个人的年龄情况,根据指定
# 的索引位置1、3、6、7进行整个部门的拆分
split_cope=np.split(cope,[1,3,6,7])
print(split_cope)
[array([20]), array([21, 23]), array([23, 22, 20]), array([25]), array([26, 27, 27, 28, 26])]
import numpy as np
cope=np.array([20,21,23,23,22,20,25,26,27,27,28,26])
cope.sort()
print(cope)
[20 20 21 22 23 23 25 26 26 27 27 28]
import numpy as np
cope=np.array([[20,23,21,22,24],[28,25,27,26,29]])
cope.sort(axis=1)
print(cope)
[[20 21 22 23 24]
 [25 26 27 28 29]]
import numpy as np
names=np.array(["经理","副经理","主管","主管","主管","技术员","业务员"])
uni_names=np.unique(names)
print(uni_names)
['业务员' '主管' '副经理' '技术员' '经理']