@浙大疏锦行
输入:
import numpy as np
a = np.array([2,4,6,8,10,12]) # 创建一个一维数组
b = np.array([[2,4,6],[8,10,12]]) # 创建一个二维数组
print(a)
print(b)
输出:
[ 2 4 6 8 10 12]
[[ 2 4 6]
[ 8 10 12]]
# 分清楚列表和数组的区别
print([7, 5, 3, 9]) # 输出: [7, 5, 3, 9](逗号分隔)
print(np.array([7, 5, 3, 9])) # 输出: [7 5 3 9](空格分隔)
a.shape # numpy中可以用shape来查看数组的形状
zeros = np.zeros((2, 3)) # 创建一个2行3列的全零矩阵
ones = np.ones((3,)) # 创建一个形状为(3,)的全1数组
arange = np.arange(1, 10) # 创建一个从1到10的数组
输入:
import numpy as np
np.random.seed(42) # 设置随机种子以确保结果可重复
# 生成10个语文成绩(正态分布,均值75,标准差10)
chinese_scores = np.random.normal(75, 10, 10).round(1)
# 找出最高分和最低分及其索引
max_score = np.max(chinese_scores)
max_index = np.argmax(chinese_scores)
min_score = np.min(chinese_scores)
min_index = np.argmin(chinese_scores)
print(f"所有成绩: {chinese_scores}")
print(f"最高分: {max_score} (第{max_index}个学生)")
print(f"最低分: {min_score} (第{min_index}个学生)")
输出:
所有成绩: [80. 73.6 81.5 90.2 72.7 72.7 90.8 82.7 70.3 80.4]
最高分: 90.8 (第6个学生)
最低分: 70.3 (第8个学生)
输入:
import numpy as np
scores = np.array([5, 9, 9, 11, 11, 13, 15, 19])
scores += 1 # 学习一下这个写法,等价于 scores = scores + 1
sum = 0
for i in scores: # 遍历数组中的每个元素
sum += i
print(sum)
输出:
100
输入:
import numpy as np
a = np.array([[1, 2], [3, 4], [5, 6]])
b = np.array([[7, 8], [9, 10], [11, 12]])
print(a)
print(b)
print(a + b) # 计算两个数组的和
print(a - b) # 计算两个数组的差
print(a / b) # 计算两个数组的除法
print(a * b) # 矩阵点乘,ipynb文件中不使用print()函数会自动输出结果,这是ipynb文件的特性
print(a @ b.T) # 矩阵乘法,3*2的矩阵和2*3的矩阵相乘,得到3*3的矩阵
输出:
[[1 2]
[3 4]
[5 6]]
[[ 7 8]
[ 9 10]
[11 12]]
[[ 8 10]
[12 14]
[16 18]]
[[-6 -6]
[-6 -6]
[-6 -6]]
[[0.14285714 0.25 ]
[0.33333333 0.4 ]
[0.45454545 0.5 ]]
[[ 7 16]
[27 40]
[55 72]]
[[ 23 29 35]
[ 53 67 81]
[ 83 105 127]]
输入:
arr1d = np.arange(10) # 数组: [0 1 2 3 4 5 6 7 8 9]
print(arr1d)
# 1. 取出数组的第一个元素。
print(arr1d[0])
# 取出数组的最后一个元素。-1表示倒数第一个元素。
print(arr1d[-1])
# 3. 取出数组中索引为 3, 5, 8 的元素。
# 使用整数数组进行索引,可以一次性取出多个元素。语法是 arr1d[[index1, index2, ...]]。
print(arr1d[[3, 5, 8]])
# 切片取出索引
print(arr1d[2:6] )# 取出索引为2到5的元素(不包括索引6的元素,取左不取右)
# 取出数组中从头到索引 5 (不包含 5) 的元素。
# 使用切片 slice [:stop]
print(arr1d[:5])
# 取出数组中从索引 4 到结尾的元素。
# 使用切片 slice [start:]
print(arr1d[4:])
# 取出全部元素
print(arr1d[:])
# 7取出数组中所有偶数索引对应的元素 (即索引 0, 2, 4, 6, 8)。
# 使用带步长的切片 slice [start:stop:step]
print(arr1d[::2])
输出:
[0 1 2 3 4 5 6 7 8 9]
0
9
[3 5 8]
[2 3 4 5]
[0 1 2 3 4]
[4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
[0 2 4 6 8]
输入:
# 数组:
arr2d = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]])
print(arr2d)
# 取出第 1 行 (索引为 1) 的所有元素。
#
# 使用索引 arr[row_index, :] 或 arr[row_index]
print(arr2d[1, :])
# 也可以省略后面的 :
print(arr2d[1])
# 取出第 2 列 (索引为 2) 的所有元素。
# 使用索引 arr[:, column_index]
print(arr2d[:, 2])
# 取出位于第 2 行 (索引 2)、第 3 列 (索引 3) 的元素。
# 使用 arr[row_index, column_index]
print(arr2d[2, 3])
# 取出由第 0 行和第 2 行组成的新数组。
# 使用整数数组作为行索引 arr[[row1, row2, ...], :]
print(arr2d[[0, 2], :])
# 取出由第 1 列和第 3 列组成的新数组。
# 使用整数数组作为列索引 arr[:, [col1, col2, ...]]
print(arr2d[:, [1, 3]])
# 取出一个 2x2 的子矩阵,包含元素 6, 7, 10, 11。
# 使用切片 slice arr[row_start:row_stop, col_start:col_stop]
print(arr2d[1:3, 1:3])
输出:
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]
[13 14 15 16]]
[5 6 7 8]
[5 6 7 8]
[ 3 7 11 15]
12
[[ 1 2 3 4]
[ 9 10 11 12]]
[[ 2 4]
[ 6 8]
[10 12]
[14 16]]
[[ 6 7]
[10 11]]
输入:
arr3d = np.arange(3 * 4 * 5).reshape((3, 4, 5))
print(arr3d )
# 选择特定的层
# 使用整数数组 [0, 2] 作为第一个维度 (层) 的索引
print(arr3d[1, :, :])
print(arr3d[1, 0:2, :])
print(arr3d[1, 0:2, 2:4])
输出:
[[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
[[20 21 22 23 24]
[25 26 27 28 29]
[30 31 32 33 34]
[35 36 37 38 39]]
[[40 41 42 43 44]
[45 46 47 48 49]
[50 51 52 53 54]
[55 56 57 58 59]]]
[[20 21 22 23 24]
[25 26 27 28 29]
[30 31 32 33 34]
[35 36 37 38 39]]
[[20 21 22 23 24]
[25 26 27 28 29]]
[[22 23]
[27 28]]
若shap_values是这样:
[
[[0.1, 0.2], [0.3, 0.4]], # 样本0:特征0对类别0和1的SHAP值,特征1对类别0和1的SHAP值
[[0.5, 0.6], [0.7, 0.8]] # 样本1:同上
]
那么 shap_values[:, :, 0]就是:
[
[0.1, 0.3], # 样本0的两个特征对类别0的SHAP值
[0.5, 0.7] # 样本1的两个特征对类别0的SHAP值
]