MxHanks' Blog

奔赴山海,保持热爱

0%

Python os.symlink() - 实现文件夹映射

需求分析

最近因为使用了 obsidian 开始记笔记,发现这个软件实在是太好用了。之前写文章一直都是在 VSCode 上面,直接写在博客文件的 _post 目录下。但是最近我把所有的笔记都迁移到了 obsidian 的笔记库中,如果要更新博客的话就要把这个文件夹里面的所有文件都一次次复制到 _post 文件夹下,这样就很麻烦,于是就想通过镜像的方式来实现需求。

mklink 是 window s系统下创建符号链接和硬链接的命令工具,它是一个很好的解决文件系统问题的工具。使用它需要管理员权限。因为 powershell 不支持 mklink 命令,所以要在前面加cmd /c 表示用 cmd 来运行该命令,路径注意引号

1
2
3
4
5
6
7
8
9
10
11
12
C:\Users\?>mklink
创建符号链接。

MKLINK [[/D] | [/H] | [/J]] Link Target

/D 创建目录符号链接。默认为文件
符号链接。
/H 创建硬链接而非符号链接。
/J 创建目录联接。
Link 指定新的符号链接名称。
Target 指定新链接引用的路径
(相对或绝对)。

因为我想要忽略掉一些文件,但是又没有提供这个选项,所以我决定使用 python 来编写一个适合的程序。

概述

os.symlink() 方法用于创建符号链接(symbolic link)。

阅读全文 »

以前学 Java 确实学得不是很明白,想通过大约 100h 的时间重新学习一编,顺便再学一些之前没有触及过的相对高级一些的知识。

Java 基础——查漏补缺

编码类型

ASCII

介绍

ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是用于电子通信的标准字符编码系统,它包括了128或256个字符,用7位或8位二进制数表示。ASCII编码是计算机中最常用的字符编码方式之一,它被广泛应用于计算机编程和通信中。

特别提示:一个字节可以存储 256 个字符,ASCII 只用了 128 个字符。

缺点

不能表示所有的符号。

应用

阅读全文 »

Syncthing 多端同步工具

需求:

主要是手机与电脑之间的文件同步,我主要用在手机与电脑的 obsidian 笔记同步。

如果对不同电脑端的同步,请移步 FreeFileSync

如果需要手机端之间的同步,自行搜索 FolderSync

根据自己的

工具介绍

Syncthing 是一款开源免费跨平台的文件同步工具,是基于P2P技术实现设备间的文件同步,所以它的同步是去中心化的,即你并不需要一个服务器,故不需要担心这个中心的服务器给你带来的种种限制,而且类似于torrent协议,参与同步的设备越多,同步的速度越快。针对隐私问题,Syncthing软件只会将数据存储于个人信任的设备上,不会存储到服务器上。设备之间的通信均通过TLS进行,Syncthing还使用了完全正向保密技术来进一步保障你的数据安全。对于处于不同局域网之中的设备之间的文件同步,Syncthing也提供了支持。

下载界面

Syncthing | Downloads, Windows 上我们选择安装 Base Syncthing , 这是基本的 Syncthing 发行版,提供命令行/守护程序,如 可执行文件和基于 Web 的用户界面。Android 上我们在 Github 上安装。

阅读全文 »

Pytorch 学习之路

一、环境安装

Anaconda

Anaconda 已经在之前机器学习数学基础部分搭建完了,这里没有记录,自己去搜别的吧。

新建 conda 环境

1
2
conda create -n pytorch python=3.6
conda activate pytorch

Pytorch 安装

进入 Pytorch 官网往下拉,然后就能看到配置的界面。因为我目前的显卡是 AMD 的,所以用不了 CUDA ,就选择 Windows-CPU-Conda , 复制命令行运行 , 并进行测试。

1
2
3
conda install pytorch torchvision torchaudio cpuonly
python
import torch

如果导入周没有报错的话,那就安装成功了。

阅读全文 »

来自 Bitly 的 USA.gov 数据

数据背景:2011年, URL缩短服务Bitly跟美国政府⽹站USA.gov合作,提供了⼀份从⽣成.gov或.mil短链接的⽤户那⾥收集来的匿名数据。在2011年, 除实时数据之外, 还可以下载⽂本⽂件形式的每⼩时快照。2017年这项服务已经关闭。

以每⼩时快照为例, ⽂件中各⾏的格式为JSON(即JavaScriptObject Notation, 这是⼀种常⽤的Web数据格式)。

我们取一行数据进行格式化之后分析:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"a": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.78 Safari/535.11",
"c": "US",
"nk": 1,
"tz": "America/New_York",
"gr": "MA",
"g": "A6qOVH",
"h": "wfLQtf",
"l": "orofrog",
"al": "en-US,en;q=0.8",
"hh": "1.usa.gov",
"r": "http://www.facebook.com/l/7AQEFzjSi/1.usa.gov/wfLQtf",
"u": "http://www.ncbi.nlm.nih.gov/pubmed/22415991",
"t": 1331923247,
"hc": 1331822918,
"cy": "Danvers",
"ll": [42.576698, -70.954903]
}

这是其中的一行数据, 我们可以通过 Python 的 JSON 模块来处理

1
2
3
4
5
6
7
8
import json

PATH = 'datasets/bitly_usagov/example.txt'

# 将 records 对象成为 Python 字典
records = [json.loads(line) for line in open(PATH)]

print(records[0])
{'a': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.78 Safari/535.11', 'c': 'US', 'nk': 1, 'tz': 'America/New_York', 'gr': 'MA', 'g': 'A6qOVH', 'h': 'wfLQtf', 'l': 'orofrog', 'al': 'en-US,en;q=0.8', 'hh': '1.usa.gov', 'r': 'http://www.facebook.com/l/7AQEFzjSi/1.usa.gov/wfLQtf', 'u': 'http://www.ncbi.nlm.nih.gov/pubmed/22415991', 't': 1331923247, 'hc': 1331822918, 'cy': 'Danvers', 'll': [42.576698, -70.954903]}

时区统计

纯 python

阅读全文 »

正则化

确认训练数据

$g(x)=0.1(x^3+x^2+x)$

向这个函数中添加一些噪点,画成图构成为训练数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import numpy as np
import matplotlib.pyplot as plt

def g(x):
return 0.1 * (x ** 3 + x ** 2 + x)

# linspace 生成 start 到 stop 的 num 个样本数 (等间距)
train_x = np.linspace(-2, 2, 8)
train_y = g(train_x) + np.random.randn(train_x.size) * 0.05

# 绘图确认
x = np.linspace(-2, 2, 100)
plt.plot(train_x, train_y, 'o')
plt.plot(x, g(x), linestyle='dashed')
plt.ylim(-1, 2)

png

拟合为 10 次多项式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 标准化
mu = train_x.mean()
sigma = train_x.std()


def standarize(x):
return (x - mu) / sigma


# 训练数据的矩阵
def to_matrix(x):
return np.vstack(
[np.ones(x.size), x, x**2, x**3, x**4, x**5, x**6, x**7, x**8, x**9, x**10]
).T


train_z = standarize(train_x)
X = to_matrix(train_z)

theta = np.random.randn(X.shape[1])
# 预测函数
def f(x):
return np.dot(x, theta)

不使用正则化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 目标函数
def E(x, y):
return 0.5 * np.sum((y - f(x)) ** 2)

ETA = 1e-4
diff = 1
error = E(X, train_y)
theta = np.random.randn(X.shape[1])
while diff > 1e-6:
theta = theta - ETA * np.dot(f(X) - train_y, X)
current_error = E(X, train_y)
diff = error - current_error
error = current_error

z = standarize(x)
plt.plot(train_z, train_y, 'o')
plt.plot(z, f(to_matrix(z)))
阅读全文 »

分类

二分类-单层感知机-iris数据集

数据分析

(数学原理推断都写在笔记本上了,纸质的,应该没有人需要,我也就不放上来了。)

书上的数据都过于简单了,虽然才刚刚开始学基础,但我还是想是一些比较实用的数据,能带给我一些成就感。这次我使用的是 iris 数据集。这也是我第一次尝试通过数学概念直接写代码,不看书,希望自己能成功。

数据中一共有五列,前四列代表着花萼长度、花萼宽度、花瓣长度、花瓣宽度,我们取前两列作分析。为了方便处理数据,我们将 “Iris-setosa” 定义为1, 将 “Iris-versicolor” 定义为 -1 , 暂时不研究第三类 “Iris-virginica” , 取到第 100 行, 先展示一下数据吧。

因为 numpy 的 loadtxt 功能面对复杂的数据集实在不是很好用,我决定要慢慢地接受使用 pandas 了。目前会慢慢过度。

1
2
3
4
5
6
7
8
9
10
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

train = np.array(pd.read_csv('cf-iris.csv').iloc[:100]) # 前 100 行作为训练集
train_x = train[:,0:2]
train_y = np.where(train[:, 4] == 'Iris-setosa', 1, -1)

plt.plot(train_x[train_y == 1, 0], train_x[train_y == 1, 1], 'o')
plt.plot(train_x[train_y == -1, 0], train_x[train_y == -1, 1], 'x')

![[output_3_1.png]]

判别函数

阅读全文 »