-
2020-11-28 13:33:48
本文只是在学习过程中框架的简记和遇到问题的整理,必然不全面和存在错漏
向量化是python的一种魔法加速操作,可以在一定程度上加速python运算,主要依托numpy库和数组的运算。目前看到的原理解释有两种,一种是numpy库的底层是cpp的,所以比较快,一种是向量化会使python并行运算的程度加快。这两种在某种程度上可能是相关的。
我接触向量化的动机是python作业要用线性变换的方法逐像素旋转图像,跑得实在太慢,所以想用向量化加速一下。结果一波优化下来,去掉一层循环大概快了1/3,与一般介绍向量化的例子相比优化速度并没有很多想要进一步压缩,再去掉一层循环之后耗时反而上升了。怀疑是优化的部分里面计算的部分耗时不是很多,剩下的可能是访问内存的时间(纯口胡)。
for i in range(len(img)):
xi=(cos_theta*(i-center_i)+sin_theta*(width-center_j)+center_i)#width是一个存储range(len(img[0]))的数组
xi=xi.astype('int')
xj=(cos_theta*(width-center_j)-sin_theta*(i-center_i)+center_j)
xj=xj.astype('int')
for j in width:#这部分因为涉及数组寻址,不会优化,只好放着
if (xi[j]>=0) & (xj[j]>=0) & (xi[j]
imgR[i][j] = img[xi[j]][xj[j]]
return imgR
下面来具体总结一下遇到的向量化的操作。
向量化的目标是尽量地减少循环,尤其是在运算很多的时候,换言之,就是要把实现重复运算的循环变成向量的形式一口气做完。
基本运算
使用np.array将想要运算的内容转成数组运算。
基本四则运算和普通的变量相同。
if语句使用np.where替代,语法是np.where(cond,trueValue,falseValue),用法以及三个变量的顺序和cpp的三元运算符完全一致,其中逻辑判断式不支持and/or等逻辑运算,但可以用cpp风格的位运算替代。
不支持使用类似int(parameter)的形式进行类型转换,需要的话请用parameter.astype(int)
矩阵运算
这里的矩阵运算作用的元素依然是上面的数组类型,如果是使用mat可能会有所不同?
在python中,矩阵间的*依然会被识别为普通的向量乘法,也即对应位置相乘,需要矩阵相乘请使用np.dot(A,B),注意乘法的顺序
扩充数组元素,有repeat和tile两种,前者是对每一个元素复制之后放在它后面,后者是把整个数组按要求复制,以下是官方样例
>>> from numpy import *
>>> repeat(7.,4)
array([ 7., 7., 7., 7.])
>>> a=array([10,20])
>>> a.repeat([3,2])#这两个参数对应元素的复制次数
array([10, 10, 10, 20, 20])
>>> repeat(a,[3,2])
array([10, 10, 10, 20, 20])
>>> a=array([[10,20],[30,40]])
>>> a.repeat([3,2],axis=0)#axis=0表示对列这个维度操作
array([[10, 20],
[10, 20],
[10, 20],
[30, 40],
[30, 40]])
>>> a.repeat([3,2],axis=1)#默认是axis=1,也就是对行操作
array([[10, 10, 10, 20, 20],
[30, 30, 30, 40, 40]])
>>> from numpy import *
>>> a=array([10,20])
>>> tile(a,(3,2)) #把原数组视为一个子矩阵,以之为元素构造3X2的矩阵
array([[10, 20, 10, 20],
[10, 20, 10, 20],
[10, 20, 10, 20]])
>>> tile(42.0,(3,2))
array([[ 42., 42.],
[ 42., 42.],
[ 42., 42.]])
矩阵的转置使用np.transpose,似乎mat支持直接a.T?
更多相关内容 -
Python 向量化处理(numpy.vectorize())
2022-01-04 12:13:55#下面的函数不可调用 def F(q2,q3,q4): x=np.arange(0,q2) y=np.arange(0,q3) #print(x) ...#采用向量化函数形式调用 def Fv(q2,q3,q4): x=np.arange(0,q2) y=np.arange(0,q3) #print(x) #p.#下面的函数不可调用 def F(q2,q3,q4): x=np.arange(0,q2) y=np.arange(0,q3) #print(x) #print(y) return sum(x)+sum(y) print(F([2,3],[4,5],4)) #采用向量化函数形式调用 def Fv(q2,q3,q4): x=np.arange(0,q2) y=np.arange(0,q3) #print(x) #print(y) return sum(x)+sum(y)+4 vecF = np.vectorize(Fv) print(vecF([2,3],[4,5],4))
-
1.3 Python与向量化
2021-10-09 19:39:15文章目录1.3.1 向量化(Vectorization)1.3.2 更多向量化的例子(More Vectorization Examples)1.3.3向量化logistic回归(Vectorizing Logistic Regression)1.3.4 向量化logistic回归的梯度输出(Vectorizing ...文章目录
- 1.3.1 向量化(Vectorization)
- 1.3.2 更多向量化的例子(More Vectorization Examples)
- 1.3.3 向量化logistic回归(Vectorizing Logistic Regression)
- 1.3.4 向量化logistic回归的梯度输出(Vectorizing Logistic Regression’s Gradient Output)
- 1.3.5 Python中的广播(Broadcasting in Python)
- 1.3.6 关于python/numpy向量的说明(A note on python /numpy vectors)
- 1.3.7 Jupiter/iPython 笔记本的快速指南(Quick tour of Jupyter/iPython Notebooks)
- 1.3.8 (选修)logistic损失函数的解释(Explanation of logistic regression cost function(optional))
- 1.3.9 总结(Summary)
上一节我们主要介绍了逻辑回归, 以输出概率的形式来处理二分类问题。我们介绍了逻辑回归的Cost function表达式,并使用**梯度下降算法来计算最小化Cost function时对应的参数 w w w 和 b b b 。**通过计算图的方式来讲述了神经网络的正向传播和反向传播两个过程。本节课我们将来探讨Python和向量化的相关知识。1.3.1 向量化(Vectorization)
深度学习算法中,数据量很大,在程序中应该尽量减少使用loop循环语句,而可以使用向量运算来提高程序运行速度。
向量化(Vectorization)就是利用矩阵运算的思想,大大提高运算速度。例如下面所示在Python中使用向量化要比使用循环计算速度快得多。
import numpy as np import time a = np.random.rand(1000000) # 生成一个[0,1)之间的随机N维浮点数组。 b = np.random.rand(1000000) tic = time.time() c = np.dot(a, b) # 向量点乘 toc = time.time() print(c) print("Vectorized version:" + str(1000 * (toc - tic)) + "ms") c = 0 tic = time.time() for i in range(1000000): c += a[i] * b[i] toc = time.time() print(c) print("for loop:" + str(1000 * (toc - tic)) + "ms")
输出结果类似于:
250286.989866 Vectorized version:1.5027523040771484ms 250286.989866 For loop:474.29513931274414ms
从程序运行结果上来看,该例子使用for循环运行时间是使用向量运算运行时间的约 300 300 300 倍。因此,深度学习算法中,使用向量化矩阵运算的效率要高得多。
为了加快深度学习神经网络运算速度,可以使用比CPU运算能力更强大的GPU。事实上,GPU和CPU都有并行指令(parallelization instructions),称为Single Instruction Multiple Data(SIMD)。
SIMD
是单指令多数据流
,能够复制多个操作数,并把它们打包在大型寄存器的一组指令集。SIMD能够大大提高程序运行速度,例如python的numpy库中的内建函数(built-in function)就是使用了SIMD指令。相比而言,GPU的SIMD要比CPU更强大一些。1.3.2 更多向量化的例子(More Vectorization Examples)
上一部分我们讲了应该尽量避免使用for循环而使用向量化矩阵运算。在python的numpy库中,我们通常使用
np.dot()
函数来进行矩阵运算。我们将向量化的思想使用在逻辑回归算法上,尽可能减少for循环,而只使用矩阵运算。值得注意的是,算法最顶层的迭代训练的for循环是不能替换的。而每次迭代过程对 J , d w , b J,dw,b J,dw,b 的计算是可以直接使用矩阵运算。
1.3.3 向量化logistic回归(Vectorizing Logistic Regression)
在1.2节介绍过,整个训练样本构成的输入矩阵 X X X 的维度是 ( n x , m ) (n_x,m) (nx,m) ,权重矩阵 w w w 的维度是 ( n x , m ) (n_x,m) (nx,m), b b b 是一个常数值,而整个训练样本构成的输出矩阵的 Y Y Y 维度为 ( 1 , m ) (1,m) (1,m) 。利用向量化的思想,所有 m m m 个样本的线性输出可 Z Z Z 以用矩阵表示:
Z = w T X + b Z=w^TX+b Z=wTX+b
在python的numpy库中可以表示为:Z = np.dot(w.T, X) + b A = sigmoid(Z)
其中, w . T w.T w.T 表示 w w w 的转置。这样,我们就能够使用向量化矩阵运算代替for循环,对所有 m m m 个样本同时运算,大大提高了运算速度。
1.3.4 向量化logistic回归的梯度输出(Vectorizing Logistic Regression’s Gradient Output)
再来看逻辑回归中的梯度下降算法如何转化为向量化的矩阵形式。对于所有 m m m 个样本, d Z dZ dZ 的维度是 ( 1 , m ) (1,m) (1,m) ,可表示为:
d Z = A − Y dZ=A-Y dZ=A−Y
d b db db 可表示为:
d b = 1 m ∑ i = 1 m d z ( i ) db=\frac{1}{m}\sum_{i=1}^{m}dz^{(i)} db=m1i=1∑mdz(i)
对应的程序为:db = 1 / m * np.sum(dZ)
d w dw dw 可表示为:
d w = 1 m X ⋅ d Z T dw=\frac{1}{m}X\cdot dZ^T dw=m1X⋅dZT
对应的程序为:dw = 1 / m * np.dot(X, dZ.T)
这样,我们把整个逻辑回归中的for循环尽可能用矩阵运算代替,对于单次迭代,梯度下降算法流程如下所示:
Z = np.dot(w.T, X) + b A = sigmoid(Z) dZ = A - Y dw = 1 / m * np.dot(X, dZ.T) db = 1 / m * np.sum(dZ) w = w - alpha * dw b = b - alpha * db
其中,
alpha
是学习因子,决定 w w w 和 b b b 的更新速度。上述代码只是对单次训练更新而言的,外层还需要一个for循环,表示迭代次数。1.3.5 Python中的广播(Broadcasting in Python)
下面介绍使用python的另一种技巧:
广播(Broadcasting)
。python中的广播机制可由下面四条表示:- 让所有输入数组都向其中shape最长的数组看齐,shape中不足的部分都通过在前面加 1 1 1 补齐;
- 输出数组的shape是输入数组shape的各个轴上的最大值;
- 如果输入数组的某个轴和输出数组的对应轴的长度相同或者其长度为 1 1 1 时,这个数组能够用来计算,否则出错;
- 当输入数组的某个轴的长度为 1 1 1 时,沿着此轴运算时都用此轴上的第一组值。
值得一提的是,在python程序中为了保证矩阵运算正确,可以使用
reshape()
函数来对矩阵设定所需的维度。这是一个很好且有用的习惯。1.3.6 关于python/numpy向量的说明(A note on python /numpy vectors)
接下来我们将总结一些python的小技巧,避免不必要的code bug。
python中,如果我们用下列语句来定义一个向量:
a = np.random.randn(5) # [-0.43391831 -0.24814198 0.5111938 -0.89792554 -1.24439111]
这条语句生成的 a a a 的维度是 ( 5 , ) (5,\space) (5, )。它既不是行向量也不是列向量,我们把 a a a 叫做
rank 1 array
。这种定义会带来一些问题。例如我们对 a a a 进行转置,还是会得到 a a a 本身。所以,如果我们要定义 ( 5 , 1 ) (5,1) (5,1) 的列向量或者 ( 1 , 5 ) (1,5) (1,5) 的行向量,最好使用下来标准语句,避免使用rank 1 array。a = np.random.randn(5,1) # [[-1.77381591][ 0.16036188] [ 0.71594668] [ 1.16073702] [ 0.23503555]] b = np.random.randn(1,5) # [[ 0.22552048 0.86586865 -1.37062805 -0.14825315 -2.07090315]] assert(a.shape == (5,1)) a.reshape((5,1))
除此之外,我们还可以使用assert语句对向量或数组的维度进行判断,assert会对内嵌语句进行判断,即判断 a a a 的维度是不是 ( 5 , 1 ) (5,1) (5,1) 的。如果不是,则程序在此处停止。使用assert语句也是一种很好的习惯,能够帮助我们及时检查、发现语句是否正确。
另外,还可以使用reshape函数对数组设定所需的维度:
1.3.7 Jupiter/iPython 笔记本的快速指南(Quick tour of Jupyter/iPython Notebooks)
Jupyter notebook(又称IPython notebook)是一个交互式的笔记本,支持运行超过40种编程语言。本课程所有的编程练习题都将在Jupyter notebook上进行,使用的语言是python。
1.3.8 (选修)logistic损失函数的解释(Explanation of logistic regression cost function(optional))
在上一节课的笔记中,我们介绍过逻辑回归的
Cost function
。接下来我们将简要解释这个Cost function是怎么来的。首先,预测输出 y ^ \hat{y} y^ 的表达式可以写成:
y ^ = σ ( w T x + b ) \hat{y}=\sigma\left(w^{T} x+b\right) y^=σ(wTx+b)
其中, σ ( z ) = 1 1 + e − z \sigma(z)=\frac{1}{1+e^{-z}} σ(z)=1+e−z1 。 y ^ \hat{y} y^ 可以看成是预测输出为正类( + 1 +1 +1)的概率:
y ^ = P ( y = 1 ∣ x ) \hat{y}=P(y=1|x) y^=P(y=1∣x)
那么,当 y = 1 y=1 y=1 时:
P ( y ∣ x ) = y ^ P(y|x)=\hat{y} P(y∣x)=y^
当 y = 0 y=0 y=0 时:
P ( y ∣ x ) = 1 − y ^ P(y|x)=1-\hat{y} P(y∣x)=1−y^
我们把上面两个式子整合到一个式子中,得到:
P ( y ∣ x ) = y ^ y ( 1 − y ^ ) ( 1 − y ) P(y|x)=\hat{y}^y(1-\hat{y})^{(1-y)} P(y∣x)=y^y(1−y^)(1−y)
由于 log \log log 函数的单调性,可以对上式 P ( y ∣ x ) P(y|x) P(y∣x) 进行 log \log log 处理:
log P ( y ∣ x ) = log y ^ y ( 1 − y ^ ) ( 1 − y ) = y log y ^ + ( 1 − y ) log ( 1 − y ^ ) \log P(y \mid x)=\log \hat{y}^{y}(1-\hat{y})^{(1-y)}=y \log \hat{y}+(1-y) \log (1-\hat{y}) logP(y∣x)=logy^y(1−y^)(1−y)=ylogy^+(1−y)log(1−y^)
我们希望上述概率 P ( y ∣ x ) P(y|x) P(y∣x) 越大越好,对上式加上负号,则转化成了单个样本的Loss function,越小越好,也就得到了我们之前介绍的逻辑回归的Loss function形式。
L = − ( t log y ^ + ( 1 − y ) log ( 1 − y ^ ) ) L=-(t\log \hat{y}+(1-y)\log (1-\hat{y})) L=−(tlogy^+(1−y)log(1−y^))
如果对于所有 m m m 个训练样本,假设样本之间是独立同分布的(iid),我们希望总的概率越大越好:
max ∏ i = 1 m P ( y ( i ) ∣ x ( i ) ) \max \prod_{i=1}^{m} P\left(y^{(i)} \mid x^{(i)}\right) maxi=1∏mP(y(i)∣x(i))
同样引入 l o g log log 函数,加上负号,将上式转化为Cost function:
J ( w , b ) = − 1 m ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) = − 1 m ∑ i = 1 m y ( i ) log y ^ ( i ) + ( 1 − y ( i ) ) log ( 1 − y ^ ( i ) ) J(w, b)=-\frac{1}{m} \sum_{i=1}^{m} L\left(\hat{y}^{(i)}, y^{(i)}\right)=-\frac{1}{m} \sum_{i=1}^{m} y^{(i)} \log \hat{y}^{(i)}+\left(1-y^{(i)}\right) \log \left(1-\hat{y}^{(i)}\right) J(w,b)=−m1i=1∑mL(y^(i),y(i))=−m1i=1∑my(i)logy^(i)+(1−y(i))log(1−y^(i))
上式中, 1 m \frac{1}{m} m1 表示对所有 m m m 个样本的Cost function求平均,是缩放因子。1.3.9 总结(Summary)
本节课我们主要介绍了神经网络基础——python和向量化。在深度学习程序中,使用向量化和矩阵运算的方法能够大大提高运行速度,节省时间。以逻辑回归为例,我们将其算法流程包括梯度下降转换为向量化的形式。同时,我们也介绍了python的相关编程方法和技巧。
-
Python中的向量化编程
2018-05-15 20:57:35课程中,多次强调了使用向量化的形式进行编码,在深度学习课程中,甚至给出了编程原则:尽可能避免使用for循环而采用向量化形式。该课程采用的是matlab/octave语言,所擅长的方向正是数值计算,语言本身内置了对矩阵...在Andrew Ng的<< Machine Learning >>课程中,多次强调了使用向量化的形式进行编码,在深度学习课程中,甚至给出了编程原则:尽可能避免使用for循环而采用向量化形式。该课程采用的是matlab/octave语言,所擅长的方向正是数值计算,语言本身内置了对矩阵/向量的支持,比如:
a = log(x)
如果变量x是一个数值,那么a也会得到一个数值结果,如果x是一个矩阵,那么结果a也是一个矩阵。
但是对于机器学习领域广为使用的python语言而言,并没有内置这样的功能,毕竟python是一门通用语言。好消息是,借助一些第三方库,我们也可以很容易的处理向量数值运算。
Numpy是Numerical Python的缩写,是Python生态系统中高性能科学计算和数据分析所需的基础软件包。 它是几乎所有高级工具(如Pandas和scikit-learn)的基础。TensorFlow使用NumPy数组作为基础构建模块,在这些模块的基础上,他们为深度学习任务(大量进行长列表/向量/数值矩阵的线性代数运算)构建了张量对象和图形流。
许多Numpy运算都是用C实现的,相比Python中的循环,速度上有明显优势。所以采用向量化编程,而不是普通的Python循环,最大的优点是提升性能。另外相比Python循环嵌套,采用向量化的代码显得更加简洁。
下面就用一些简单的示例进行说明:
import numpy as np import time a = np.random.rand(1000000) b = np.random.rand(1000000) tic = time.time() c = np.dot(a, b) toc = time.time() print("c: %f" % c) print("vectorized version:" + str(1000*(toc-tic)) + "ms") c = 0 tic = time.time() for i in range(1000000): c += a[i] * b[i] toc = time.time() print("c: %f" % c) print("for loop:" + str(1000*(toc-tic)) + "ms")
在我的电脑上运行结果如下:
c: 249981.256724 vectorized version:0.998973846436ms c: 249981.256724 for loop:276.798963547ms
可见,向量化的实现代码速度上有飞速提升,而且代码也看起来更简洁。
总之,无论你有多长的数据列表并需要对它们进行数学转换,都强烈考虑将这些Python数据结构(列表或元组或字典)转换为numpy.ndarray对象并使用固有的矢量化功能。
更多关于numpy向量化编程的指导,可以参考这本开源的在线书籍:From Python to Numpy
)
-
机器学习014_Python中的向量化编程
2020-08-15 16:58:141、矢量化/向量化 我们推荐使用向量化的形式进行编码,尽可能避免使用for循环而采用向量化形式。 对于机器学习领域广为使用的python语言而言,没有内置对于矩阵、向量的支持,毕竟python是一门通用语言。但是,借助... -
第二周:神经网络的编程基础之Python与向量化
2021-11-09 11:33:37本节课我们将来探讨Python和向量化的相关知识。 1. Vectorization 深度学习算法中,数据量很大,在程序中应该尽量减少使用循环语句,而可以使用向量运算来提高程序运行速度。 向量化(Vectorization)就是利用... -
python numpy 按行归一化的实例
2020-12-23 17:11:08如下所示: import numpy as np Z=np.random.random((5,... 您可能感兴趣的文章:详解python实现数据归一化处理的方式:(0,1)标准化Python数据预处理之数据规范化(归一化)示例python 实现对数据集的归一化的方法(0- -
python向量画图
2020-11-21 03:44:29排名第一【python】:排名第三【算法】:排名第四前言在写代码前,先简单的过一下svm的基本原理,如下:svm(support vector machine)简单的说是一个分类器,并且是二类分类器。 vector:通俗说就是点,或是数据。 ... -
c++ 向量化_使用向量化、矩阵化、cuda等不同方法加速python程序
2020-10-21 22:41:50使用向量化、矩阵化、cuda等不同方法加速python程序第一次写知乎文章,本文中如有错误请不吝赐教,各位大大多多包涵。 本文是一次实验室组会的分享内容,对于机器视觉各类问题中经常需要处理大量计算任务的情况,以... -
jax:Python + NumPy程序的可组合转换:区分,向量化,JIT到GPUTPU等
2021-02-08 10:14:46JAX:Autograd和XLA | | | | | 新闻: 什么是JAX? JAX是和结合,用于高性能机器学习研究。... 您甚至可以使用一次对多个GPU或TPU内核进行编程,并通过整体进行区分。 深入研究,您会发现JAX实际上是可的可 -
numpy的广播(Broadcasting)与向量化编程(Vectorization)
2020-05-16 22:28:17文章目录什么是向量化编程为什么要使用向量化编程:以矩阵乘法为例numpy的广播机制(Broadcasting) 什么是向量化编程 把一次处理一个数字的指令改为一次处理一堆数字,就是向量化编程,这’一堆数字’就是我们所说... -
利用python实现词向量训练----
2021-01-28 23:31:03python的一堆工具包https://www.lfd.uci.edu/~gohlke/pythonlibs/------------------------------------------------------------------------貌似遇见了自然语言处理的行家我们参考以下的链接... -
numpy之向量化函数
2022-04-06 11:49:05Python的numpy库操作指南 -
Python 进阶视频课 - 15. 量化交易之向量化回测
2021-06-13 00:17:46这是 Python 进阶课的第十五节- 量化交易之向量化回测,进阶课的目录如下:NumPy上NumPy 下Pandas 上Pandas下SciPy 上SciPy 下Pandas 时... -
Apache Doris 向量化设计与实现
2022-02-28 00:35:27导读:向量化技术带来极致的CPU效率的同时,也已经成为了软件开发的趋势,而数据库的向量化不仅仅是 CPU 指令的向量化,还是一个巨大的性能优化工程。本文从CPU向量化原理出发,通过Cach... -
神经网络与深度学习笔记 (三)python和向量化
2020-06-09 13:36:58摘要:本文主要包含向量化、向量化logistic回归、向量化logistic回归的梯度输出、Python中的广播、Python_numpy向量注意点、Jupyter Ipython笔记本使用介绍和logistic损失函数解释等神经网络的基础知识 -
Python神经网络编程 PDF 高质量完整版
2020-12-08 20:45:06给大家带来的一篇关于Python相关的电子书资源,介绍了关于Python、神经网络、Python编程方面的内容,本书是由人民邮电出版社出版,格式为PDF,资源大小11.5 MB,塔里克·拉希德编写,目前豆瓣、亚马逊、当当、京东等... -
python计算机视觉编程
2015-01-26 22:33:501.1 pil:python图像处理类库 1.1.1 转换图像格式 1.1.2 创建缩略图 1.1.3 复制和粘贴图像区域 1.1.4 调整尺寸和旋转 1.2 matplotlib 1.2.1 绘制图像、点和线 1.2.2 图像轮廓和直方图 1.2.3 交互... -
文本向量化-计算文本相似的的方法-基于python语言的实现
2017-11-23 17:29:08本节主要讨论三种方法实现中文文本的向量化,编程环境python3.6. TF 词频的方法 TFIDF 词频-逆文档频率 Word2Vec 第一种TF方式,即是基于词频的方式,举一个最简单的例子: 1:今天天气不错! 2:今天天气很好。 ... -
Python计算机视觉编程pdf
2020-12-16 19:48:57Python计算机视觉编程 内容简介《Python计算机视觉编程》是计算机视觉编程的实践指南,依赖Python语言讲解了基础理论与算法,并通过大量示例细致分析了对象识别、基于内容的图像搜索、光学字符识别、光流法、跟踪、... -
Python进阶:使用Matplotlib进行数据可视化(二)
2021-01-06 21:09:03CSDN 编辑时,图片容易缺失,可关注「懒编程」获得更好的阅读体验。 接着 使用Matplotlib进行数据可视化(一) ,继续使用 Matplotlib 绘制图像,公众号回复 data2 就可以获得本文章的代码与使用数据。 箱线图(BoxPlot... -
Python实现将json文件中向量写入Excel的方法
2020-12-31 17:09:57有一个需要是将已经向量化的页面的数据中的向量写入Excel中用于展示,工作很简单,这里简单复习一下Excel文件写的工作,试验中使用的json文件内容如下: 代码如下:[ {“vector”: [0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0... -
R编程特性1:向量与向量化
2018-07-23 11:30:46作者简介:鲁伟:一个数据科学践行者的学习日记。数据挖掘与机器学习,R与Python,理论与实践并行。个人公众号:数据科学家养成记 (微信ID:louwill12) ... -
机器学习中向量化编程总结记录
2018-10-21 11:56:49转载自 机器学习中向量化编程总结记录 向量化编程总结记录 很多时候,我们在实现算法的时候,总会碰到累和的伪代码: 比如下面这个: 为了简单我这里只重复5次,但是原理是一样的。 很显然我们要得到这个... -
Python 编程训练2:二维向量
2020-07-12 17:24:54定义一个 Python 类名为 V2,用于表示二维向量,支持下列向量运算: 由两个实数创建一个二维向量:如:v = V2(1.1, 2.2) 将一个向量转换为字符串形式(使用__str__方法) 分解(得到x和y的值) 两个二维向量相加,... -
向量化的好处举例
2020-10-11 11:23:321、向量化 向量化(Vectorization)就是利用矩阵运算(代替for循环),提高运算速度。 如上图所示:向量化计算的速度是for循环计算速度的600倍