2017-01-23 5 views
0

У меня есть следующие функции в NumPy:Вставка строки в средней тензоре tensorflow

A = np.array([[1, 2, 3], 
      [4, 5, 6], 
      [7, 8, 9], 
      [10, 11, 12]]) 


def insert_row_averages(A, n=2): 
    slice2 = A[n::n] 
    v = (A[n-1::n][:slice2.shape[0]] + slice2)/2.0 
    np.insert(A.astype(float),n*np.arange(1,v.shape[0]+1),v,axis=0) 

, который в основном принимает среднее значение выше и ниже строки и вставляет его между ними, через каждый п интервалы.

Любая идея о том, как я могу сделать это в Tensorflow? В частности, что я могу использовать вместо np.insert, поскольку, похоже, не существует эквивалентной функции.

ответ

1

Вы можете использовать подход, основанный инициализации решить, как так -

def insert_row_averages_iniitalization_based(A, n=1): 

    # Slice and compute averages 
    slice2 = A[n::n] 
    v = (A[n-1::n][:slice2.shape[0]] + slice2)/2.0 

    # Compute number of rows for o/p array 
    nv = v.shape[0] 
    nrows = A.shape[0] + nv 

    # Row indices where the v values are the inserted in o/p array 
    v_rows = (n+1)*np.arange(nv)+n 

    # Initialize o/p array 
    out = np.zeros((nrows,A.shape[1])) 

    # Insert/assign v in output array 
    out[v_rows] = v # Assign v 

    # Create 1D mask of length equal to no. of rows in o/p array, such that its 
    # TRUE at places where A is to be assigned and FALSE at places where values 
    # from v were assigned in previous step. 
    mask = np.ones(nrows,dtype=bool) 
    mask[v_rows] = 0 

    # Use the mask to assign A. 
    out[mask] = A 
    return out 
+0

Это выглядит красиво, но она по-прежнему использует NumPy вместо tensorflow. Моя проблема в том, что я действительно не могу найти эквиваленты тензорного потока, которые я мог бы использовать для перевода этого кода. – Qubix

+0

@Qubix Итак, 'tensorflow' не поддерживает инициализацию массивов? – Divakar

+0

Я говорил, что такие функции, как «np.setdiff1d», могут не иметь эквивалента. Я просматриваю документацию прямо сейчас. – Qubix

Смежные вопросы