一段代码学习Numpy基础

import numpy as np

# 创建一个3*3矩阵
arr = np.array([
    [1, 2, 3],
    [2, 3, 4],
    [3, 4, 5]
], dtype=np.float64)

print(arr)
print('dim:', arr.ndim) # 维度
print('shape:', arr.shape) # 形状:几行几列
print('size:', arr.size) # 包含元素的个数

arr1 = np.arange(1, 100, 2) # 在1-100之间生成步长为2的数据
arr2 = np.arange(10) # 生成0-10之间的10个数
print(arr1)
print(arr2)

print(arr1.reshape((5, 10))) # 将形状设置为5行,10列

zero = np.zeros([4, 4], dtype=np.float32) # 元素都为0的矩阵
print(zero)

one = np.ones([3, 4], dtype=np.float32)  # 元素都为1的矩阵
print(one)

empty = np.empty([3, 3], dtype=np.int32) # 元素都为空的矩阵
print(empty)

ls = np.linspace(1, 30, 40, dtype=np.float32) #生成1-30之间的40个浮点数字
print('linespace:\n', ls)



# 基础运算

a = np.array([1,2,3,4]) # [1,2,3,4]
b = np.arange(4) # [0,1,2,3]

## 减法
sub = a - b
print('sub:', sub)

## 加法
add = a + b
print('add:', add)

## 乘法
multi = a * b
print('multi:', multi)

## 除法
divi = b / a
print('divi:', divi)

## 利用广播功能判断满足条件的数
print(a > 2) # 判断a中大于2的数,返回一个包含True和False的列表[True, True, False, False]
print(a == 4) # [False, False, False, True]


# 矩阵运算
aa = np.array([[1,2,3],
               [2,3,4]]) # 创建一个2*3的矩阵
bb = np.arange(6).reshape((2, 3)) # 生成一个2*3的矩阵

# 加
print(aa + bb)

# 减
print(aa - bb)

# 逐个相乘
print(aa * bb)

# 矩阵乘
cc = bb.reshape(3, 2) # 因为aa为2*3的矩阵,所以与其相乘的矩阵的行数必须与其列数一致,即为3
print(np.dot(aa, cc))
print(aa.dot(cc)) #这两种乘法的结果一致

rdn = np.random.random((3, 4)) # 随机生成一个元素在0-1之间的3*4的矩阵
print(rdn)

# 求矩阵内和
print(np.sum(rdn)) # 求整个矩阵元素相加的总和
print(np.sum(rdn, axis=1)) # axis代表坐标轴,1指的是以行为单位求行的和
print(np.sum(rdn, axis=0)) # axis代表坐标轴,1指的是以行为单位求列的和

# 求矩阵中的min值
print(np.min(rdn)) # 在整个矩阵中找最小值
print(np.min(rdn, axis=1)) # 在矩阵的行中找最小值
print(np.min(rdn, axis=0)) # 在矩阵的列中找最小值

# 求矩阵中的最大值
print(np.max(rdn)) # 在整个矩阵中找最大值
print(np.max(rdn, axis=1)) # 在整个矩阵的行中找最大值
print(np.max(rdn, axis=0)) # 在整个矩阵的列中找最大值

# 基础运算2
aa2 = np.arange(0,12).reshape((3,4)) # 生成一个元素在1-12的3*4的矩阵
print(aa2)

print(np.argmin(aa2)) # 求最小值索引
print(np.argmax(aa2)) # 求最大值索引

print(np.mean(aa2)) # 计算矩阵平均值 aa2.mean()或者aa2.average()亦可
print(np.mean(aa2, axis=0)) # 指定列计算平均数
print(np.mean(aa2, axis=1)) # 指定行计算平均数

print(np.median(aa2)) # 求中位数,例如0-11的中位数为5.5

print(np.cumsum(aa2)) # 累加 第一个数的值 = 第一个数, 第二个数的值 = 第一 + 第二, 第三个数的值 = 第一 + 第二 + 第三...,以此类推

print(np.nonzero(aa2)) # 找出非0的数

print(np.sort(aa2)) # 逐行排序

print(np.transpose(aa2)) # 矩阵转置,行列元素互换 亦可写成 aa2.T

print(np.clip(aa2, 6, 10)) # 截取数值,在6-10之间的数保持原样,小于6变为6, 大于10变为10

print(aa2[2]) # 索引第二行
print(aa2[2][2]) # 索引第二行第二列
print(aa2[:, 1]) # 第一列所有数 [1, 5, 9]
print(aa2[0:2, 1]) # 第一列第0,1的数 [1, 5]

for row in aa2:
    print(row) # 迭代每一行

for col in aa2.T:
    print(col) # 先将aa2转置,再进行行迭代,即可得到aa2的列

aa2_flat = aa2.flatten()# 将矩阵返回一维数组
print(aa2_flat)

for item in aa2_flat:
    print(item) # 迭代每一个项


# 合并array
A = np.array([1,2,3])
B = np.array([2,3,4])
C = np.vstack((A, B)) # 垂直合并
D = np.hstack((A, B)) # 水平合并
print(C)
print(D)

E = np.concatenate((A, B, A, B), axis=0) # 在列的维度上进行合并
print(E)

# 分割
A = np.arange(12).reshape(3, 4)
print(A)

print(np.split(A, 3, axis=0)) # 在列上进行分割
print(np.split(A, 2, axis=1)) # 在行上进行分割

print(np.vsplit(A, 3)) # 垂直方向分割
print(np.hsplit(A, 2)) # 水平方向进行分割

# deep copy
aa3 = A # 浅拷贝 aa3改变会引发A改变,容易导致数据出错
print(aa3 is A) # True aa3和A指向的是内存中同一个地址

aa4 = A.copy() # deep copy aa4的改变不会引起A改变
print(aa4 is A) # False 深拷贝后的aa4在内存中有了自己的位置

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用numpy和pandas实现随机森林回归的示例代码: ```python import numpy as np import pandas as pd class RandomForestRegressor: def __init__(self, n_estimators=100, max_depth=None, min_samples_split=2, min_samples_leaf=1): self.n_estimators = n_estimators self.max_depth = max_depth self.min_samples_split = min_samples_split self.min_samples_leaf = min_samples_leaf self.trees = [] def fit(self, X, y): for i in range(self.n_estimators): tree = DecisionTreeRegressor(max_depth=self.max_depth, min_samples_split=self.min_samples_split, min_samples_leaf=self.min_samples_leaf) sample_indices = np.random.choice(range(len(X)), size=len(X), replace=True) X_sample = X[sample_indices] y_sample = y[sample_indices] tree.fit(X_sample, y_sample) self.trees.append(tree) def predict(self, X): predictions = np.zeros((len(X), len(self.trees))) for i, tree in enumerate(self.trees): predictions[:, i] = tree.predict(X) return np.mean(predictions, axis=1) class Node: def __init__(self, feature_index=None, threshold=None, left=None, right=None, value=None): self.feature_index = feature_index self.threshold = threshold self.left = left self.right = right self.value = value class DecisionTreeRegressor: def __init__(self, max_depth=None, min_samples_split=2, min_samples_leaf=1): self.max_depth = max_depth self.min_samples_split = min_samples_split self.min_samples_leaf = min_samples_leaf self.root = None def fit(self, X, y): self.root = self.build_tree(X, y) def build_tree(self, X, y, depth=0): n_samples, n_features = X.shape variance = np.var(y) best_variance_reduction = 0 best_feature_index = None best_threshold = None if depth < self.max_depth and n_samples >= self.min_samples_split: for feature_index in range(n_features): feature_values = X[:, feature_index] thresholds = np.unique(feature_values) for threshold in thresholds: y_left = y[X[:, feature_index] < threshold] y_right = y[X[:, feature_index] >= threshold] if len(y_left) > 0 and len(y_right) > 0: left_variance = np.var(y_left) right_variance = np.var(y_right) variance_reduction = variance - (len(y_left) / n_samples) * left_variance - (len(y_right) / n_samples) * right_variance if variance_reduction > best_variance_reduction: best_variance_reduction = variance_reduction best_feature_index = feature_index best_threshold = threshold if best_variance_reduction > 0: X_left = X[X[:, best_feature_index] < best_threshold] y_left = y[X[:, best_feature_index] < best_threshold] left = self.build_tree(X_left, y_left, depth + 1) X_right = X[X[:, best_feature_index] >= best_threshold] y_right = y[X[:, best_feature_index] >= best_threshold] right = self.build_tree(X_right, y_right, depth + 1) return Node(best_feature_index, best_threshold, left, right) return Node(value=np.mean(y)) def predict(self, X): y_pred = np.zeros(len(X)) for i, sample in enumerate(X): current_node = self.root while current_node.left: if sample[current_node.feature_index] < current_node.threshold: current_node = current_node.left else: current_node = current_node.right y_pred[i] = current_node.value return y_pred ``` 以上代码实现了一个随机森林回归模型,其中: - `RandomForestRegressor` 类是随机森林回归模型的实现,通过调用 `DecisionTreeRegressor` 类来构建多个决策树,并将它们组合起来进行预测。 - `DecisionTreeRegressor` 类是决策树回归模型的实现,通过递归地构建决策树来对数据集进行拟合和预测。 - 在 `DecisionTreeRegressor` 类中,通过计算方差来评估数据集的纯度,通过选择最佳的特征和阈值来对数据集进行划分。在这个过程中,通过指定最大深度和最小分割样本数等参数来控制决策树的生长过程。 - 在 `RandomForestRegressor` 类中,通过随机选择样本和特征的方式来构建多个决策树,并将它们的预测结果取平均值来得到最终的预测结果。 总的来说,随机森林回归是一种基于决策树的集成学习方法,通过随机选择样本和特征的方式来构建多个决策树,并将它们组合起来进行预测。这种方法可以有效地提高模型的泛化能力和预测性能,同时也可以评估特征的重要性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值