1. 程式人生 > >numpy.ndarray.flat/flatten 與 Spark 下的 flatMap

numpy.ndarray.flat/flatten 與 Spark 下的 flatMap

numpy.ndarray.flat/flatten

flat:使平坦,在程式設計上就對應著二維變一維。

  • (1)numpy.ndarray.flat 和 numpy,ndarray.T 一樣不是函式呼叫,因此不可以跟函式呼叫操作符(也即一對小括號),因此也不可以指定平坦化的引數,比如按行平坦還是按列平坦,其預設的 flat 的動作是逐行(row-major)進行的。

    >>> import numpy as np
    >>> X = np.random.randint(0, 5, (2, 3))
    array([[3, 0, 2],
           [1, 2, 2
    ]]) >>> x = X.flat >>> x <numpy.flatiter object at 0x9e82278> # 不直接返回一維陣列 # 但可直接索引 >>> x[0] >>> x[3] 1 >>> np.array(x) array([3, 0, 2, 1, 2, 2])
  • (2)numpy.ndarray.flatten() 是函式呼叫,可以指定平坦化的引數。

    ndarray.flatten(order
    ='C')

    可選引數,order:

    • (1)’C’:C-style,行序優先
    • (2)’F’:Fortran-style,列序優先
    • (3)’A’:保持
    • (4)預設為’C’

Spark 下的 flatMap

Spark 下的 flatMap 就類似於 numpyt 對多維陣列的 flat,也即按行序進行扁平化;

  • Spark 中 map函式會對每一條輸入進行指定的操作,然後為每一條輸入返回一個物件;

  • 而flatMap函式則是兩個操作的集合——正是“先對映後扁平化”:

    • 操作1:同map函式一樣:對每一條輸入進行指定的操作,然後為每一條輸入返回一個物件

    • 操作2:最後將所有物件合併為一個物件