当前位置: 首页 > news >正文

Numpy 简单学习【学习笔记】

一、ndarray 数组创建

1、安装 numpy 库

pip install numpy

查看 numpy 版本信息:

import numpy as np
np.__version_

在这里插入图片描述

2、array

基本方式:
传递一个列表类型,返回数组类型

a = np.array([1, 2, 3])
print(type(a))
print(a)

在这里插入图片描述

多维数组:
传递多维列表

a = np.array([[1, 3], [2, 4]])
print(a)

在这里插入图片描述

3、asarray

asarray 可以将参数转换为 ndarray 数组类型

a = np.asarray([1, 2, 3])
print(a)

在这里插入图片描述

array 与 asarray 方法的区别:

array 会 无条件创建一个新的数组对象;而 asarray 对于已经是数组的对象是不会再次创建数组,而是直接返回参数本身。

a = np.array([1, 2, 3])
b = np.array(a)
print(a is b)
c = np.asanyarray(a)
print(a is c)

在这里插入图片描述

4、arange

类似 Python 中的 range 函数(arrange 全称 array-range,不是 arrange)

a = np.arange(1, 10, 2)
print(a)

在这里插入图片描述

numpy 中的 arange 可以产生浮点类型的区间

a = np.arange(1, 10.2, 0.5)
print(a)

在这里插入图片描述

5、ones / ones_like

ones 可以创建一个值全为 1 的数组(shape 指定数组的形状,即每个维度的长度)

a = np.ones(shape=(2, 3, 4))
print(a)

在这里插入图片描述

ones_like 可以创建一个值全为 1 的数组,其形状与参数数组的形状相同

a = np.array([1, 2, 3])
b = np.ones_like(a)
print(b)

在这里插入图片描述

6、zeros / zeros_like

与 ones / ones_like 类似

a = np.zeros(shape=5)
print(a)
b = np.zeros_like(a)
print(b)

在这里插入图片描述

7、empty / empty_like

类似可以用来作未初始化

a = np.empty(shape=(2, 3))
print(a)
b = np.empty_like(a)
print(b)

在这里插入图片描述

未初始化含义:

数组元素的值是程序上一次遗留下来的值

np.array([1.2, 2.5, 3.5])
print(np.empty(3))
np.ones(3)
print(np.empty(3))

在这里插入图片描述

8、full / full_like

创建数组,数组的值使用参数指定的值进行填充

a = np.full((2, 3), 100)
print(a)
b = np.full_like(a, 200)
print(b)

在这里插入图片描述

9、eye / identity

创建一个单位矩阵,参数来指定行(列)数

print(np.eye(2))
print(np.identity(3))

在这里插入图片描述

10、linspace

创建一个元素是等差数列的数组。
可以通过 num 指定数列元素的个数,默认为 0;也可以通过 endpoint 来指定是否包含终止点,默认为 True。

print(np.linspace(1, 5, num=6))
print(np.linspace(1, 10, num=10, endpoint=False))

在这里插入图片描述

11、logspace

创建一个元素在取对数后是等差数列的数组。
即原数组的元素(对数中的真数)就是等比数列。
(base 用来指定底数,默认为 10)

print(np.logspace(1, 10, num=10, endpoint=True, base=2))

在这里插入图片描述

二、ndarray 与 list 的区别

1、向量化计算

  • 列表:
li = [1, 2, 3]
li2 = [4, 5, 6]
# 使用循环
li3 = []
for item1, item2 in zip(li, li2):
    li3.append(item1 + item2)
# 使用列表推导式
li3 = [item1 + item2 for item1, item2 in zip(li, li2)]
print(li3)
  • ndarray
a = np.array([1, 2, 3])
a2 = np.array([4, 5, 6])
a3 = a + a2
print(a3)

在这里插入图片描述

2、广播

指的是对数组扩展成相同的形状,从而便于进行向量化计算的现象。

  • list
li = [15, 14, 16, 15]
for i in range(len(li)):
    li[i] = li[i] + 1
# li = [item + 1 for item in li]
print(li)
  • ndarray:
a = np.array([15, 14, 16, 15])
print(a)

在这里插入图片描述

数组与标量之间

a = np.array([[1, 2, 3], [4, 5, 6]])
print(a + 10)

在这里插入图片描述

数组与数组之间的广播

a = np.array([0, 1, 2])
b = np.array([[2, 3, 4], [5, 6, 7]])
print(a + b)
c = np.array([[10], [20]])
print(a + c)

在这里插入图片描述

无法实现的广播

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

在这里插入图片描述

3、计算速度

创建对象

在这里插入图片描述

操作元素

在这里插入图片描述

4、节省内存空间

在这里插入图片描述

三、实现线性回归

1、参数求解

使用波士顿数据集,根据公式来预测最终的房价

from sklearn.model_selection import train_test_split

data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd.read_csv(data_url, sep=r"\s+", skiprows=22, header=None)
data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
target = raw_df.values[1::2, 2]
X, y = data, target
X = np.concatenate([np.ones((X.shape[0], 1)), X], axis=1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
w = np.linalg.inv(X_train.T.dot(X_train)).dot(X_train.T).dot(y_train)
print(w[1:])
print(w[0])

在这里插入图片描述

2、可视化

只选择 RM(平均房间数)一个特征

import matplotlib.pyplot as plt
plt.rcParams["font.family"] = "SimHei"
plt.rcParams["axes.unicode_minus"] = False

X1 = X_train[:, 6]
X1 = np.stack([np.ones(X1.shape[0]), X1], axis=1)
w2 = np.linalg.inv(X1.T.dot(X1)).dot(X1.T).dot(y_train)
plt.scatter(X1[:, 1], y_train, s=15)
x = np.linspace(X1[:, 1].min() - 0.5, X1[:, 1].max() + 0.5, 500)
x1 = np.stack([np.ones(x.shape[0]), x], axis=1)
plt.plot(x, np.dot(x1, w2), c="r")

在这里插入图片描述

3、数据预测

训练模型过后对未知数据进行预测

y_hat= np.dot(X_test, w)
print(np.mean((y_hat - y_test) ** 2))
plt.figure(figsize=(15, 5))
plt.plot(y_test, ls="--", c="r", marker="o", label="真实值")
plt.plot(y_hat, ls="--", c="g", marker="o", label="预测值")
plt.legend()

在这里插入图片描述

4、sklearn 的实现

from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

lr = LinearRegression()
lr.fit(X_train, y_train)
y_hat = lr.predict(X_test)
print(lr.coef_)
print(lr.intercept_)
print(mean_squared_error(y_test, y_hat))

在这里插入图片描述

相关文章:

  • 基于CNN的FashionMNIST数据集识别6——ResNet模型
  • Python 异步编程
  • MIT6.5840 lab3A
  • llama源码学习·model.py[7]Transformer类
  • gcc -fPIC 选项
  • 浅谈Qt事件子系统——以可拖动的通用Widget为例子
  • AI 驱动视频处理与智算革新:蓝耘MaaS释放海螺AI视频生产力
  • one-hot标签详解
  • 6.4考研408数据结构图论核心知识点深度解析
  • DHCPv6 Stateless Vs Stateful Vs Stateless Stateful
  • RAG文本分块的魔法与智慧:传统分块与延迟分块,选哪个?
  • 程序代码篇---Pyqt的密码界面
  • Jetpack Compose 选项卡控件实现
  • 数据结构-二叉树
  • 【Linux 维测专栏 2 -- Deadlock detection介绍】
  • NIO ByteBuffer 总结
  • WPF控件DataGrid介绍
  • Ubuntu常用命令大全 | 零基础快速上手指南
  • Python环境安装
  • 【C++】内存管理
  • 国家主席习近平同普京总统举行大范围会谈
  • 习近平同俄罗斯总统普京举行会谈
  • 暴雨及强对流天气黄色预警已发布!南方进入本轮降雨最强时段
  • 司法部:建立行政执法监督企业联系点,推行行政执法监督员制度
  • 金融监管总局:正在修订并购贷款管理办法,将进一步释放并购贷款的潜力
  • 德雷克海峡发生7.4级地震,震源深度10千米