Numpy tricks
1. 排序的mask获取
应用场景:KNN中给定dataset X, Y, 在X中寻找dist最小的那几个的index然后到Y中去获取label。
Given a 2D matrix: data = np.array([[3,1],[2,4]])
排序
- 直接
np.sort(data, axis = none)
generate a 1D array[1,2,3,4]
, np.sort
if assign axis, e.g.np.sort(data, axis=0)
will generate a SAME DIMENSION matrix sorted in given axis. e.g[[2,1],[3,4]]
—same holds for HIGH DIMENSION.
- 直接
排序,但要求顺序给出index .e.g. 1D matrix
x=np.array([2,1,3])
, 要给出indexordered_mast = [1,0,2]
sox[ordered_mask] = [1,2,3]
.- Use
np.argsort(x)
https://docs.scipy.org/doc/numpy/reference/generated/numpy.argsort.ht
- Use
- 尤其有用的是
index=None
的情况:注意用np.unravel_index()
来把1Dindex还原成2D!!!
###2. BroadCasting
- numpy broadcasting真是tricky!
- 定义用来match different-dim matrix https://docs.scipy.org/doc/numpy/user/basics.broadcasting.html
详见作业KNN的一道题[给定m*D的training set,给定n*D的testing set, 要求两个set的distance矩阵dists[I][j] = dist(X_test[I], X_train[j])
非常类似 stackoverflow的一个问题https://stackoverflow.com/questions/32856726/memory-efficient-l2-norm-using-python-broadcasting
我看完后想到的是
diff = X_test.reshape((n, 1, D)) - X_train.reshape((1, m, D)) #
dists = np.sqrt(np.sum(diff ** 2, axis = 2))
错是没错,但是太慢—比two loops还慢,而且还占内存,因为中间有一步:
(n, 1, D) - (1, m ,D) => (n, m, D)
有一个(n,m,D)
的超大矩阵。
Stackoverflow给出了一个好方法把 X_train 和 X_test先解耦:
(X-Y) ^2 = X^2 + Y^2 - 2XY
其实
dist(X_test[I], X_train[j])
的计算不用真的做X_test[i]-X_train[j],|X_test[I]|
是可以复用的。
m = self.X_train.shape[0]n = X.shape[0]Xtrain2 = np.sum(self.X_train**2, axis=1).reshape((m, 1)) # (m*1)X2 = np.sum(X**2, axis = 1).reshape((n,1)) # (n*1)X_Xtrain = X.dot(self.X_train.T) # (n*m)dists = np.sqrt(X2 - 2*X_Xtrain +Xtrain2.T)
或者
###3. K-fold cross validation
Here we do K-fold cross validation manually
3.1 用np.split_array(numOfFolds)
来划分folds
numpy Boolean array可以和一般array做运算!False当作0,true当作1
Numpy tricks相关推荐
- numpy tricks(二)—— 删除多维数组的行或列
numpy.delete numpy 下的多维数组,如果要删除其中的某些行,或某些列,不可以用置空的方式,进行设置: A[1, :] = None, ⇒ 会将 A 中的第一行数据全部置为 Nan 1. ...
- numpy tricks(一)—— 多维数组的阈值化处理
所谓多维数组的阈值化处理,比如将矩阵中小于某阈值的元素全部置零. >> A = np.random.randn(3, 4) array([[-2.05480015, 1.02727696, ...
- 提高 GPU 训练利用率的Tricks
前言 首先,如果你现在还是在进行session.run(..)的话!尤其是苦恼于GPU显存都塞满了利用率却上不去的童鞋,这篇文章或许可以给你打开新世界的大门噢 如果发现经过一系列改良后训练效率大大提高 ...
- 从39个kaggle竞赛中总结出来的图像分割的Tips和Tricks(附资源)
来源:AI公园 本文约2700字,建议阅读10分钟 本文与你分享参加了39个Kaggle比赛的技巧和经验. 想象一下,如果你能得到所有的tips和tricks,你需要去参加一个Kaggle比赛.我已经 ...
- 11 Python Pandas tricks that make your work more efficient
Pandas is a widely used Python package for structured data. There're many nice tutorials of it, but ...
- tensorflow gpu利用率为0_训练效率低?GPU利用率上不去?快来看看别人家的tricks吧...
前言 首先,如果你现在已经很熟悉tf.data+estimator了,可以把文章x掉了╮( ̄▽ ̄"")╭ 但是!如果现在还是在进行session.run(..)的话!尤其是苦恼于G ...
- 跑python gpu利用率低_训练效率低?GPU利用率上不去?快来看看别人家的tricks吧~...
前言 首先,如果你现在已经很熟悉tf.data+estimator了,可以把文章x掉了╮( ̄▽ ̄"")╭ 但是!如果现在还是在进行session.run(..)的话!尤其是苦恼于G ...
- 使用NumPy优于Python列表的优势
In this article, I will show a few neat tricks that come with NumPy, yet are must faster than vanill ...
- 训练效率低?GPU利用率上不去?快来看看别人家的tricks吧~
前言 首先,如果你现在已经很熟悉tf.data+estimator了,可以把文章x掉了╮( ̄▽ ̄"")╭ 但是!如果现在还是在进行session.run(..)的话!尤其是苦恼于G ...
- 史上最全提升GPU的tricks合集
前言 首先,如果你现在已经很熟悉tf.data+estimator了,可以把文章x掉了╮( ̄▽ ̄"")╭ 但是!如果现在还是在进行session.run(..)的话!尤其是苦恼于G ...
最新文章
- mysql delete and or_Mysql delete操作
- j90度度复数运算_看得懂的复数
- android模拟器插件,Android模拟器插件找不到android SDK
- Linux 系统应用编程——网络编程(高级篇)
- php width,PHP imagefontwidth()用法及代码示例
- mysql多实例和主从区别_mysql多实例的安装以及主从复制配置
- 人生小故事,看完后想十秒钟,你会获益匪浅
- mysql 51.数据库下载_Database Master官方下载_MySQL/SQLite数据库管理软件V5.2.51.18513下载(暂未上线)_预约_飞翔下载...
- APP、软件版本号的命名规范与原则
- 计算机组成原理4位快速加法器
- SQL基础【一.DQL 数据查询语言】
- [美] 尼古拉斯·卡尔 《浅薄:互联网如何毒化了我们的大脑 》
- 电脑键盘equals在哪个位置_常用标点符号和电脑键盘符号英语表示 -
- log4j2配置详情
- 放大电路不同频段耦合电容、旁路电容、极间电容和分布电容的分析方法
- MATLAB | 绘制复指数函数 y = exp(j*w*n)的三维图像
- 蜡烛图(K线图)-1简介
- Maven-使用私服的好处
- VC++ 利用Opencv 做的一个发票识别程序,识别有误
- 电脑开机自动修复,磁盘错误问题解决