WedX - журнал о программировании и компьютерных науках

Как получить строки матрицы без использования каких-либо циклов в numpy или tenorflow?

У меня есть матрица, и я хочу читать в каждой строке матрицы и использовать tf.nn.top_k, чтобы найти верхние значения k для каждой строки.

Как мне получить каждую строку матрицы без использования циклов или понимания списка. Я хочу использовать Tensorflow или numpy, и я думал о применении широковещательной передачи.

Если бы я поместил индексы в массив, например, если бы в матрице было 10 строк, у меня было бы:

indices = [0,1,2,3......,9]

а тогда я мог применить трансляцию?


  • Расскажите о tf.nn.top_k? Принимает ли он только 1-мерный массив (это только одна строка 2-мерного массива)? Трансляция и / или индексация не решат проблему такого рода. 23.01.2018
  • Что такое пример ввода и вывода? 23.01.2018

Ответы:


1

Скажите (как в одном другом ответе здесь):

a = np.random.randint(0, 1000, (4,4))

тогда вы можете просто сделать:

np.sort(a)[:,-1:-3:-1]

где вместо индекса 3 вы помещаете число, связанное с тем, сколько основных значений вы хотите получить.

РЕДАКТИРОВАТЬ: чтобы ответить на ваш комментарий: во-первых, я меняю тип данных на float (чтобы иметь дело со значением 1/3):

a = 1000*np.random.random((4,4))

тогда я получаю индексы:

idx = a.argsort().argsort()

назначьте 1/3 двум верхним значениям:

a[idx>=2] = 1./3.

и присваиваем ноль отдыху:

a[idx<2] = 0

и вуаля.

23.01.2018
  • после получения верхних значений, как я могу изменить их на 1/3, а остальные значения установить равными 0? 23.01.2018
  • Спасибо, это определенно помогает. Есть ли еще способ сделать это с помощью tf.nn.top_k или других функций тензорного потока, поскольку я пытаюсь узнать больше о тензорном потоке 23.01.2018
  • также что делает a.argsort (). argsort ()? почему мы применяем его дважды? 23.01.2018
  • Довольно интересно и познавательно следить за тем, что делает argsort().argsort(), поэтому я не хочу лишать вас удовольствия. Взгляните на документацию и следуйте ей на простом одномерном примере. И извините, я не знаком с тензорным потоком. 23.01.2018

  • 2

    Вы можете сделать это разными способами. В следующем способе используется argsort numpy. .

    import numpy as np
    
    a = np.random.randint(0, 1000, (4, 4))
    a
    

    возвращается

    array([[712, 654, 871, 934],
           [639, 587, 216, 952],
           [853, 311, 598, 222],
           [466, 957, 306, 359]])
    

    Затем мы можем получить аргументы в порядке убывания и использовать их для извлечения соответствующих элементов:

    o = np.argsort(a)[:, ::-1]
    a[np.arange(4)[:, None], o[:, :2]]
    

    возвращается

    array([[934, 871],
           [952, 639],
           [853, 598],
           [957, 466]])
    
    23.01.2018
  • Могу ли я использовать эту возвращенную матрицу для индексации моей исходной матрицы (например, широковещательной передачи?) 23.01.2018
  • Вот что такое переменная o ... индексы x (ось-1) для исходной матрицы. 24.01.2018

  • 3

    Из документации tf.nn.top_k

    Находит значения и индексы k самых больших записей для последнего измерения.

    Итак, вы можете напрямую передать свой тензор этой функции, и она найдет k largest элементов из последнего измерения. Не нужно использовать петли.

    23.01.2018
  • Да, когда я передаю матрицу, она находит наибольшее k в каждой строке. Однако, когда я нахожу эти k наибольшими, я хочу заменить их на 1 / k, а остальные элементы в строке - на нули. Как мне это сделать, если он вернет матрицу? 23.01.2018

  • 4

    Вот способ сделать это с помощью тензорного потока.

    #+BEGIN_SRC python :results output org drawer
    import numpy as np
    import tensorflow as tf
    
    mat = np.random.randint(0, 1000, (4, 4))
    print(mat)
    
    # All tensorflow from here
    tmat = tf.convert_to_tensor(mat)
    
    k = 3
    
    # ki are the indices within each row
    kv, ki = tf.nn.top_k(tmat, k)
    kmin = tf.reduce_min(kv, axis=1)[:, None]
    
    newmat = tf.where(tmat < kmin, tf.zeros_like(tmat, dtype=tf.float64), tf.ones_like(tmat) / k)
    
    with tf.Session() as sess:
        print(newmat.eval())
    #+END_SRC
    
    #+RESULTS:
    :RESULTS:
    [[ 97 805   0 104]
     [920 340 905  24]
     [439 243 705 161]
     [146 650 542 284]]
    [[0.33333333 0.33333333 0.         0.33333333]
     [0.33333333 0.33333333 0.33333333 0.        ]
     [0.33333333 0.33333333 0.33333333 0.        ]
     [0.         0.33333333 0.33333333 0.33333333]]
    :END:
    
    23.01.2018
    Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]