SIGMA's BLOG

但行好事,莫问前程

sudo blkid

vim /etc/fstab

1
2
3
4
5
6
7
UUID=7f2b5d4e-f224-488b-a1ea-db4bb238c927 /               ext4    errors=remount-ro 0       1
# /home was on /dev/sdb5 during installation
UUID=6e31fdba-7634-4b6a-a2eb-89483164fa75 /home ext4 defaults 0 2
# swap was on /dev/sdb6 during installation
UUID=f011abae-9db0-4e0a-a1d8-b1c471a4963a none swap sw 0 0
# data
UUID=c0375a25-24b9-4a0d-860e-0cbcab3b0c5c /home/sigma/Data ext4 defaults 0 3

挂载u盘

1
2
sudo blkid
sudo mount /dev/sdc ~/U

Intro

配置方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(py35)$jupyter notebook --generate-config
# 若这里提示sql相关的库缺失,要安装sqlite3等包
# 问题出在下载python的时候,仅装了官方提供的安装包,没有装其他可能需要的相应的库而导致的。
# 所以编译安装python时先
# 安装 python3-dev libffi-dev libssl-dev libsqlite3-dev sqlite3 pysqlite2
# 具体哪个是apt那个是pip装的不记得了

$ipython
In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password:
Verify password:
Out[2]: 'sha1:ce23d945972f:34769685a7ccd3d08c84a18c63968a41f1140274'

$vim ~/.jupyter/jupyter_notebook_config.py
# 作如下修改
c.NotebookApp.ip='*'
c.NotebookApp.password = u'sha:ce...刚才复制的那个密文'
c.NotebookApp.open_browser = False
c.NotebookApp.port =8888 #随便指定一个端口

# 进入虚拟环境启动jupyter
(py35)$jupyter notebook

远程访问

此时应该可以直接从本地浏览器直接访问http://address_of_remote:8888就可以看到jupyter的登陆界面

建立ssh通道

如果登陆失败,则有可能是服务器防火墙设置的问题,此时最简单的方法是在本地建立一个ssh通道:
在本地终端中输入
```bash ssh username@address_of_remote -L127.0.0.1:1234:127.0.0.1:8888 ```

便可以在localhost:1234直接访问远程的jupyter了。

feature为(3312, 3312)的稀疏特征矩阵,里面的值全为0或1。由于比较好奇各种存储矩阵的方式之间占用空间的差异,所以做了个实验:

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
# env
Ubuntu16.04 64位
python3.5
pycharm

# experiment

#list
print(sys.getsizeof(feature))

feature_int64 = np.asarray(feature)
feature_int8 = np.asarray(feature, dtype=np.int8)
# ndarray
print(sys.getsizeof(feature_int64))
print(sys.getsizeof(feature_int8))
# csr
print(sys.getsizeof(scipy.sparse.csr_matrix(feature_int64)))
print(sys.getsizeof(scipy.sparse.csr_matrix(feature_int8)))
# lil
print(sys.getsizeof(scipy.sparse.lil_matrix(feature_int64)))
print(sys.getsizeof(scipy.sparse.lil_matrix(feature_int8)))

output:

26736 list

98114800 ndarray int64
12264448 ndarray int8

56 csr int64
56 csr int8

56 lil int64
56 lil int8

可见,csr与lil在这里的占用空间情况相近,list次之,ndarray为最,并且受数据类型影响明显。

按定义来看,lil的读写方式比csr的方便直观一些,csr会有点绕。

https://stackoverflow.com/questions/16981921/relative-imports-in-python-3

import文件夹A的py文件

  • 要在A目录下新建init.py文件
  • 将目录加进sys.path
  • 文件结构如下``` test -- A -- __init__.py -- a.py -- B -- b.py
    1
    2
    3
    4
    5
    6
    7
    8
    </li>
    </ul>
    <h4 id="方法-1"><a href="#方法-1" class="headerlink" title="方法 1"></a>方法 1</h4><p>对b.py文件</p>

    ```python
    import sys
    sys.path.insert(0, '..')
    from A import a

    方法2

    在test下创建 ``` 然后对b.py

    from test.A import a
    ```</p>
    

from tqdm import trange

这个是一个强大的终端进度条工具

1
2
3
from tqdm import tqdm
for i in tqdm(range(10000)):
pass

76%|████████████████████████████ | 7568/10000 [00:33<00:10, 229.00it/s]

假如有一个py文件如下

1
2
3
4
5
6
7
8
9
10
# config.py

import argparse

parser = argparse.ArgumentParser()
arg_list = []

def get_config():
config, unparsed = parser.parse_known_args()
return config, unparsed

另一个py文件如下

1
2
3
4
5
6
# gcrn_main.py
import numpy as np
from gconvRNN.config import get_config

if __name__ == "__main__":
config, unparsed = get_config()

他们的执行顺序是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
运行 gcrn_main.py
执行 import numpy as np
执行 from gconvRNN.config import get_config

跳转到 config.py

执行 import argparse
执行 parser = argparse.ArgumentParser()
执行 arg_list = []

然后运行到
def get_config()
这一行
跳转回 gcrn_main.py

执行 if
执行 get_config

跳转到 config.py

执行 get_config()

并且!

config.py 里面的全局变量parser是一直存在的!可以被get_config()调用的!

1
2
3
4
5
# 2^6
2 ** 6

# if var.num_elements() is None or [] assume size 0.
var_size = var.get_shape().num_elements() or 0

读文件会用到的操作

1
2
3
4
5
6
循环读取文件的每一行
for line in open(filename):
print(line) ==> '1235\n'
index.append(int(line.strip()))

这样不仅不用自己判断文件结尾,而且strip可以去除'\n'
0%