Numpy 操作¶
以下是Bodo可以优化和并行化的数据并行Numpy操作符列表。
Numpy 逐元素 数组操作¶
一元运算符¶
+-~
二元运算符¶
+-*//?%|>>^<<&**//
比较运算符¶
==!=<<=>>=
数据并行数学运算¶
numpy.addnumpy.subtractnumpy.multiplynumpy.dividenumpy.logaddexpnumpy.logaddexp2numpy.true_dividenumpy.floor_dividenumpy.negativenumpy.positivenumpy.powernumpy.remaindernumpy.modnumpy.fmodnumpy.absnumpy.absolutenumpy.fabsnumpy.rintnumpy.signnumpy.conjnumpy.expnumpy.exp2numpy.lognumpy.log2numpy.log10numpy.expm1numpy.log1pnumpy.sqrtnumpy.squarenumpy.reciprocalnumpy.gcdnumpy.lcmnumpy.conjugate
三角函数¶
numpy.sinnumpy.cosnumpy.tannumpy.arcsinnumpy.arccosnumpy.arctannumpy.arctan2numpy.hypotnumpy.sinhnumpy.coshnumpy.tanhnumpy.arcsinhnumpy.arccoshnumpy.arctanhnumpy.deg2radnumpy.rad2degnumpy.degreesnumpy.radians
位操作函数¶
numpy.bitwise_andnumpy.bitwise_ornumpy.bitwise_xornumpy.bitwise_notnumpy.invertnumpy.left_shiftnumpy.right_shift
比较函数¶
numpy.logical_andnumpy.logical_ornumpy.logical_xornumpy.logical_not
浮动函数¶
numpy.isfinitenumpy.isinfnumpy.signbitnumpy.ldexpnumpy.floornumpy.ceilnumpy.trunc
Numpy 降维函数¶
numpy.sumnumpy.prodnumpy.minnumpy.maxnumpy.argminnumpy.argmaxnumpy.allnumpy.any
Numpy数组创建函数¶
numpy.emptynumpy.identitynumpy.zerosnumpy.onesnumpy.empty_likenumpy.zeros_likenumpy.ones_likenumpy.full_likenumpy.arraynumpy.asarraynumpy.copynumpy.arangenumpy.linspacenumpy.repeat只接受标量num_repeats
Numpy数组操作函数¶
numpy.shape-
numpy.reshapeshape值不能为 -1。 -
numpy.sort numpy.concatenatenumpy.append-
numpy.unique输出被假定为相对于输入是“小”的,并且被复制。 如果输出应该保持分布,请使用Series.drop_duplicates()。 -
numpy.where(1 和 3 个参数) numpy.select数值/布尔类型的默认值为0/False。对于所有其他类型,默认值为pd.NA。如果choicelist中的任何值是可为空的,或者默认值为pd.NA或None,则输出将是一个可为空的 pandas 数组,而不是一个 numpy 数组。numpy.nan_to_num将无穷大/NaN 值转换为常规浮点数。numpy.union1dnumpy.intersect1d尚未支持分布式numpy.setdiff1d目前尚不支持分布式numpy.hstack在每个等级上连接元素而不保持顺序numpy.tile支持两种情况:数组是 2D 且reps的形式是(1, x),或者数组是 1D 且reps的形式是(x, 1)。numpy.ndarray.T支持二维数组的分布式数组转置。
Numpy数学和统计函数¶
numpy.cumsumnumpy.diffnumpy.percentilenumpy.quantilenumpy.mediannumpy.meannumpy.stdnumpy.interp目前没有分布式支持。np.linalg.norm仅对具有 axis=1 的 2D 输入进行了并行化。
随机数生成器函数¶
numpy.random.randnumpy.random.randnnumpy.random.ranfnumpy.random.random_samplenumpy.random.samplenumpy.random.randomnumpy.random.standard_normalnumpy.random.multivariate_normal(必须提供大小)numpy.random.chisquarenumpy.random.weibullnumpy.random.powernumpy.random.geometricnumpy.random.exponentialnumpy.random.poissonnumpy.random.rayleighnumpy.random.normalnumpy.random.uniformnumpy.random.betanumpy.random.binomialnumpy.random.fnumpy.random.gammanumpy.random.lognormalnumpy.random.laplacenumpy.random.randintnumpy.random.triangular
numpy.dot 函数¶
numpy.dot在一个矩阵和一个向量之间或在两个向量之间。
Numpy 输入输出¶
numpy.ndarray.tofilenumpy.fromfile支持读取二进制文件。支持file、dtype、count和offset参数(file和dtype是必需的)。file应该是一个字符串。也支持s3://和hdfs://文件路径。
我们关于可扩展I/O的文档包含 示例用法和更多系统特定说明。
Numpy 矩阵支持¶
numpy.asmatrix仅对数组或矩阵输入进行了并行化。*左侧参数可以分配,但是右侧参数被复制。
杂项¶
- Numpy数组理解:例如:A = np.array([i**2 for i in range(N)])
注意
除非在此明确提及,否则不支持可选参数。对于多维数组的操作,大小为1的维度的自动广播不支持。
Numpy dot() 并行化¶
函数 np.dot 根据输入数组的维度和分布有不同的分布规则。下面的例子演示了两种情况:
@bodo.jit
def example_dot(N, D):
X = np.random.ranf((N, D))
Y = np.random.ranf(N)
w = np.dot(Y, X)
z = np.dot(X, w)
return z.sum()
example_dot(1024, 10)
example_dot.distributed_diagnostics()
这里是 distributed_diagnostics() 的输出:
Data distributions:
$X.130 1D_Block
$Y.131 1D_Block
$b.2.158 REP
Parfor distributions:
0 1D_Block
1 1D_Block
3 1D_Block
Distributed listing for function example_dot, ../tmp/dist_rep.py (4)
++++++++++++++++++++++++++++++++++| parfor_id/variable: distribution
@bodo.jit |
def example_dot(N, D): |
X = np.random.ranf((N, D))++++| #0: 1D_Block, $X.130: 1D_Block
Y = np.random.ranf(N)+++++++++| #1: 1D_Block, $Y.131: 1D_Block
w = np.dot(Y, X)++++++++++++++| $b.2.158: REP
z = np.dot(X, w)++++++++++++++| #3: 1D_Block
return z.sum() |
第一个 dot 具有一个一维数组,使用 1D_Block
分布作为第一个输入 Y,而第二个输入 X 是
一个二维数组,使用 1D_Block 分布。
因此,dot 是对分布式数据集的求和归约
,因此,输出 (w) 位于 reduce 端并被
分配 REP 分布。
第二个 dot 具有一个 2D 数组,采用 1D_Block
分布(X)作为第一个输入,而第二个输入是
一个 REP 数组(w)。因此,计算在 X 的行之间是数据并行的,
这意味着输出(z)采用 1D_Block
分布。
变量 z 在分布报告中不存在,因为编译器优化能够消除它。它的值是动态生成和消费的,没有内存加载/存储开销。