火竞猜-最佳电子竞技竞猜网站
火竞猜

简约风格装修,数据处理利器NumPy初识(三),ye321

admin admin ⋅ 2019-04-01 15:17:49

回忆

在数据处理利器NumPy初识(二)中,咱们介绍了NumPy中的几个常用函数,包含reshape()、resize()、copy()、astype()、stack()、split()等,以及ndarray的索引和切片的根本用法。今日咱们看一下NumPy中对ndarray的数据运算和播送机制的相孙道临为何不爱王文娟关内容。

ndarray数据运算

NumPy中ndarray的数据运算包含根本标量数据运算、向量矩阵内积核算和数据处理相关运算。

  • 根本标量数据运算

NumPy中ndarray的根本标量数据运算指的是在ndarray上以其间的元素办法进行核算,既能够用“+(加)、-(减)、*(乘)、/(除)、**(幂)”等数学运算符重载,也能够运用nixgixNumPy模块中的函数(add、subtract、multiply、divide等)。下面咱们来看一下ndarray的一些根本标量数据运算。​​

import numpy as np
arr = np.arange(12).reshape(3, 4)
print(arr)
print("---------------")
# 加
print(arr + 5)
print(np.add(arr, 5))
print("---------------")
# 减
print(arr - 5)
print(np.subtract(arr, 5))
print("---------------")
# 乘
print(arr * 5)
print(np.multiply(arr, 5))
print("---------------")
# 除
print(arr / 5)
print(np.divide(arr, 5))
print("---------------")
# 幂
print(arr ** 2)
print("---------------")
# 平方根
print(np.sq兵士为国守慈祥简谱rt(x))

咱们创立一个3*4的ndarray,然后别离对它进行加、减、乘、除、幂、平方根的运算,能够看到,当ndarray与单个数进行标量数据运算时,ndarra唐一白是谁演的y中的每个元素别离与此数进行运算得到成果。一同,用数学符号和运用NumPy模块中的运算函数核算的成果是共同的。运转成果如下所示。

数据处理利器NumPy初识(三)

ndarray与单个标量的运算

ndarray除了能够与单个数进行根本标量数据运算外,两个ndarray之间也能够进行根本标量数据运算,运算规矩为ndarray中对应方位上的元素别离进行对应的运算。咱们创立两个ndarray进行根本标量数据运算。​

import numpy as np
x = np.array([[1,2],[3,4]], dtype=np.float64)
y = np.array([[5,6],[7,8]], dtype=np.float64)
# 加法
print(x + y)
print(np.add(x, y))
print("---------------")
# 减法
print(x - y)
print(np.subtract(x, y))
print("---------------")
# 乘法
print(x * y)
print(np.multiply(x, y))
print("---------------")
# 除法
print(x / y)
print(np.divide(x, y))
print("---------------")
# 幂
print(x ** y)
print("---------------")

两个ndarray中对应方位上的元素别离做对应运算,运转成果如下所示。

数据处理利器NumPy初识(三)

ndarray与ndarray的标量运算

  • 向量矩阵内积核算

咱们之前有说到,ndarray的元素之间是用空格离隔的,从结构上看,一个一维ndarray相当于任鱼网选号一个向量,一个多维ndarray就相当于一个矩阵要插。事实上,在许多运用场景下,咱们也常常把ndarray作为向量或矩阵来运用。学过向量与矩阵的朋友都知道,数学上的向量乘法、矩阵乘法是不同于标量乘法的,不是简略的对应方位上的元素做乘法。(关于向量与矩阵的概念以及向量乘法、矩阵乘法这儿不做具体介绍,但这是比较重要的知识点,不了解或许现已忘记的朋友请必须去学习回忆一下。)

不同于MATLAB,NumPy中“*”符号仅仅是标量乘法,而不是向量乘法、矩阵乘法,NumPy中的向量乘法、矩阵乘法运用dot()函数来核算,运算成果也成为向量或矩阵的内积。dot()函数也有两种运用办法,既能够作为ndarray目标的实例办法,也能够直接以NumPy模块中的函数作为运算。咱们创立两个矩阵和两个向量,别离进行向量与向量的内积核算,向量与矩阵的内积核算,矩阵与矩阵的内积核算。​

import numpy as np
# 创立两个矩阵
x = np方虹日.array([[1,2],[3,4]])
y = np.array([[5,6],[7,8]])
# 创立两个向量
v = np.array([9,10])
w = np.array([11, 12])
# 向量与向量的内积为标量
print(v.dot(w.T))
print(np.dot(v, w))
print("---------------")
# 矩阵与向量的内积为向开开援生制药股份有限公司量
print(x.dot(v))
print(np.dot(x, v))
print(刘萌萌的老公"---------------")
# 矩阵与矩阵的内积为矩阵
print(x.dot(y))
print(np.dot(x, y))

运算成果如下所示。向量与向量的内积成果为一个标量,向量与矩阵的内积成果为一个向量,矩阵与矩阵的内积成果为一个矩阵。

向量、矩阵间的内积运算

  • 数据处理相关运算

NumPy中关于ndarray的数据处理运算供给了许多有用的函数,包含核算平均值的mean()函数、核算最大、最小值的max()妮可尼尔、min()函数,核算标准差的std()函数、核算方差的var()函数、求总和的sum()函数、排序函数sort()等。这些运算函数的根本用法如下。​

import numpy as np
arr = np.arange(12).reshape(3, 4)
# 平均值
print(arr.mean())
print(np.mean(arr, axis=0))
print("---------------")
# 最大、最小值
print(arr.max())
print(np.max(arr, axis=1))
print("---------------")
print(arr.min())
print("---------------")
# 标准差
print精约风格装饰,数据处理利器NumPy初识(三),ye321(arr.std())
print("---------------")
# 方差
print(arr.var())
print("---------------")
# 求和
print(arr.sum())
print("---------------")
# 排序
print(np.s云天瑶ort(arr))
print(-np.sort(-arr))

咱们创立一个3*4的ndarray来进行数据处理运算。这些数据处理潮女汇运算函数与dot()函数相同,也有两种运用办法,以mean()为例,咱们能够运用arr.mean()或np.mean(),当不传参数时,默许操作目标精约风格装饰,数据处理利器NumPy初识(三),ye321为整个ndarray,设置axis=1或axis=0时能够别离指定对行或对列进行数据处理运算。运转成果如下所示。

数据处理相关运算

NumPy中的播送

NumPy中的播送是一种十分强壮的机制,它答应NumPy在履行数据精约风格装饰,数据处理利器NumPy初识(三),ye321运算时运用不同形状的数组。例如,当一个较小的ndarray和一个较大的ndarray要进行数据运算时,咱们会期望经过屡次运用较小的数组来对较大的数组履行一些操作。

在介绍根本标量数据运算时,咱们用ndarray与一个标量进行运算,其实便是一个简略的播送,播送机制会把标量循环填充成与要运算的ndarray相同形状的一个ndarray,然后再运算,所以咱们看到的成果便是ndarray中每个元素别离与标量进行相关运算。

假如没有播送机制,当ndarray与一个标量进行运算时,需求先对这个标量进行转化,咱们能够来看一下这个进程。​

import numpy as np
x = np.arange(12).reshape(3, 4)
print(x)
v = 5
# 创立与x形状共同的空ndarray
y = np.empty_like(x)
# 用标量5填充这个空ndarray
for i in range(3):
for j in range(4):
y[i, j] = 5

print("---------------")
print(y)
# 运算
print("---------------")
print(np.add(x, y))

首要,创立一个与要运算的ndarray形状共同的空ndarray,然小学女生图片后用参加运算的标量去填充这个空ndarray,最终对这两个形状共同的ndarray进行运算。运转成果如下所示。

循环扩大模仿播送

以上是一种坚持ndarray形状共同的扩展办法,可是这种办法在ndarray十分大时,像这样的显式循环就会变得很慢。这时咱们有另一种快速的扩展办法,运用NumPy的tile()函数进行叠加。 咱们能够像如下这样完成精约风格装饰,数据处理利器NumPy初识(三),ye321这种办法。​

import numpy as np
x精约风格装饰,数据处理利器NumPy初识(三),ye321 = np.arange(12).reshape(3, 4)
print(x)
v = np.array([5囊组词])
# 运用tile进行ndarray叠加
vv = np.tile(v, (3, 4))
print(经典传奇5大灵异女鬼"---------------")
print(vv)
# 运算
y =久久久 x + vv
print("---------------")
print(y)

tile()函数传入要扩展的ndarray,然后将形状传入,就会开端往各个维度方向上进行扩展。运转成果如下所示,与循环办法填充完成的成果是相同的。

tile()函数扩大模仿播送

以上是没有播送机制的前提下对较小的ndarray进行扩展填充至与较大的ndarray形状共同的办法,有了播送机制,就武炼万界不需求以上的操作了,关于3*4的ndar精约风格装饰,数据处理利器NumPy初识(三),ye321ray与标量5的运算,咱们能够直接进行。​

import numpy as np
x = np.arange(lolmh12).reshape(3, 4)
print(x)
v = 5
# 直接运算
y = x + v
print("---------------")
print(y)

运算成果如下所示,能够得到相同的正确成果。

播送机制运算

当然,需求留意的是,不是一切较小的ndarray与较大的ndarray之间的运算都是能够运用播送机制的,例如,咱们用形状为(4,3)的ndarray与形状为(3,4)的ndarray进行数精约风格装饰,数据处理利器NumPy初识(三),ye321据运算,就会报“operands could not be broadcast together with shapes (4,3) (3,4)”的过错,能够看到,形状(4,3)和(3,4)的ndarray并不能顺利进行播送来运算。

因而,咱们在运用播送机制时,一定要特别留意是否遵从了以下规矩:

1、假如ndarray不具有相同的rank,则将较低等级ndarray的形状增加1,直到两个形状具有相同的长度。

2、假如两个ndarray在维度上具有相同的巨细,或许假如其间一个ndarray在该维度中的巨细为1,则称这两个ndarray在维度上是兼容的。

3、假如ndarray在一切维度上兼容,则能够一同播送。

4、播送之后,每个阵列的行为就好像它的形状等于两个输入ndarray的形状的元素最大值。

5、在一个ndarray的巨细为1且另一个ndarray夏浩然身高的巨细大于1的任何维度中,第一个ndarray的行为就像沿着该维度仿制相同。

形状(4,3)和(3,4)的ndarray便是由于没有遵从规矩2,所以不能顺利进行播送。在遵从播送机制规矩的根底下,咱们应该尽可能地去运用它,由于播送机制一般会使咱们的代码愈加简练,功率也更高。

总结

以上介绍了NumPy中的各种数据运算处理办法以及NumPy中播送机制的根本概念和用法。感谢我们的重视,欢迎批评指正,一同沟通~

admin

admin

TA太懒了...暂时没有任何简介

精彩新闻