Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

王晓钰完成 DL102 入学任务啦 #80

Open
clearboy opened this issue Oct 5, 2017 · 3 comments
Open

王晓钰完成 DL102 入学任务啦 #80

clearboy opened this issue Oct 5, 2017 · 3 comments

Comments

@clearboy
Copy link

clearboy commented Oct 5, 2017

基础任务

环境

  • Windows
  • Python 3.6

成果

词组 词频 数目
的 人 0.42% (930 of 223329)
他 的 0.23% (503 of 223329)
自己 的 0.21% (480 of 223329)
上 的 0.16% (356 of 223329)
他们 的 0.15% (335 of 223329)
就 会 0.10% (225 of 223329)
人 的 0.13% (293 of 223329)
的 时候 0.12% (261 of 223329)
都 是 0.09% (206 of 223329)
的 东西 0.09% (207 of 223329)

代码

代码

思路

代码分为三个部分

  • 读取文件并分词
  • 将分词映射到一个二维数组,用来统计二元词组的数目

二维数组分为行和列,行对应二元词组的第一个词,列对应二元词组的第二个词,数组的数对应二元词组的数目

  • 寻找最高的十个二元词组

体验

  1. 由于对numpy不熟悉,自己写top 10的查找算法,耗费了很多时间
    我用二维数组作为存储二元词组的数据结构,做起来比较顺利。
    但是在统计词频最高的十个词组的时候,担心运算性能,同时也是由于对numpy不熟悉,没有直接用numpy中的排序和查找功能,而是自己写了查找的算法,但是这部分耗费了很多时间。

  2. 从dict更改为list浪费了很多时间
    同时,由于对python基本数据结构(dict,list)的性能不熟悉,我一开始使用dict做词到numpy索引的映射,后来由于无法从value反查key,又将dict修改为list,也浪费了很多时间。

教训

  • 对numpy需要系统性学习一下,了解用法和性能,以及使用的边界和禁忌;
  • 对python的基本数据结构需要再熟悉一下。
@clearboy
Copy link
Author

clearboy commented Oct 5, 2017

进阶任务

我在windows下,主要是要安装相关的库,包括:sympy, mathplot, numpy

求解以下函数相对 x 的导数:

使用sympy库,

from sympy import *
x = Symbol('x')
init_printing()
diff('x*sin(x**2)')

向量化 (vectorization) 计算

import numpy as np
import matplotlib.pyplot as plt
arr = np.random.normal(size=100)
print(arr)
plt.hist(arr, bins=100, normed=1)
plt.show()

@wuyangping
Copy link

wuyangping commented Oct 8, 2017

代码打印的调试信息很全,赞一个!
任务一可以用python的dict或Counter存储二元词组并计数,代码可以简洁很多。
进阶任务二只实现了一半,还需要将小于0的元素变成0.

@clearboy
Copy link
Author

clearboy commented Oct 9, 2017

任务一是自己做了才发现可以这样,也看了大家的作业,用counter的确简洁很多。

进阶任务二已更新
代码
核心的修改:

arr = np.random.normal(size=100)
arr[arr<0]=0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants