Python打卡第16天

@浙大疏锦行

numpy数组的创建

简单创建

输入:

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的数组

随机创建

Python打卡第16天_第1张图片

输入:

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]]

numpy数组的索引:一维、二维、三维

一维数组索引

输入:

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值的深入理解

若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值
]

你可能感兴趣的:(Python打卡60天,python,开发语言,机器学习,numpy)