Правильный способ дождаться завершения одной функции, прежде чем продолжить?

В этом конкретном случае einsum, вероятно, легче понять, чем tensordot. Например:

c = np.einsum('ijk,ik->ij', a, b)

Я немного упрощу объяснение, чтобы сделать вещи более понятными. У нас есть два входных массива (разделенных запятой), и это дает наш выходной массив (справа от ->).

  • a имеет форму 3, 4, 5, и мы ссылайтесь на него как ijk
  • b имеет форму 3, 5 (ik)
  • Мы хотим, чтобы выход c имел форму 3, 4 (ij ])

Кажется немного магическим, верно? Давайте немного сломаем это.

  • Буквы, которые мы «теряем» при пересечении ->, представляют собой оси, которые будут суммированы. Это также делает dot.
  • Нам нужен вывод с формой 3, 4, поэтому мы устраняем k
  • . Поэтому выход c должен be ij
  • Это означает, что мы будем ссылаться на b как ik.

В качестве полного примера:

import numpy as np

a = np.random.random((3, 4, 5))
b = np.random.random((3, 5))

# Looping through things
c1 = []
for i in range(3):
    c1.append(a[i].dot(b[i]))
c1 = np.array(c1)

# Using einsum instead
c2 = np.einsum('ijk,ik->ij', a, b)

assert np.allclose(c1, c2)

Вы можете сделать это с помощью tensordot. Я добавлю пример этого, как только у меня будет немного больше времени. (Конечно, если кто-то еще хотел бы добавить пример tensordot в качестве еще одного ответа, не стесняйтесь!) [/ ​​G11]

140
задан DA. 3 February 2014 в 01:11
поделиться

2 ответа

Это, что я придумал, так как я должен выполнить несколько операций в цепочке.

<button onclick="tprom('Hello Niclas')">test promise</button>

<script>
    function tprom(mess) {
        console.clear();

        var promise = new Promise(function (resolve, reject) {
            setTimeout(function () {
                resolve(mess);
            }, 2000);
        });

        var promise2 = new Promise(async function (resolve, reject) {
            await promise;
            setTimeout(function () {
                resolve(mess + ' ' + mess);
            }, 2000);
        });

        var promise3 = new Promise(async function (resolve, reject) {
            await promise2;
            setTimeout(function () {
                resolve(mess + ' ' + mess+ ' ' + mess);
            }, 2000);
        });

        promise.then(function (data) {
            console.log(data);
        });

        promise2.then(function (data) {
            console.log(data);
        });

        promise3.then(function (data) {
            console.log(data);
        });
    }

</script>
-1
ответ дан 23 November 2019 в 23:00
поделиться

Я действительно смущен процессом... полагая, что у меня есть внутренняя функция, как может я возвращать внешней функции (истинный/ложный) результат!?!

    function confirmar2(texto)
{
    var modalConfirm = function(callback){
      $("#modalConfirmacaoTexto").html(texto);

      $("#modalConfirmacaoBotaoSim").unbind("click");
      $("#modalConfirmacaoBotaoSim").on("click", function(){callback(true);$("#modalConfirmacao").modal('hide');return;});

      $("#modalConfirmacaoBotaoNao").unbind("click");
      $("#modalConfirmacaoBotaoNao").on("click", function(){callback(false);$("#modalConfirmacao").modal('hide');return;});
      $('#modalConfirmacao').modal('show');
    };

    modalConfirm(function(confirm){
      if(confirm)
      {
          return true;
      }
      else
      {
          return false;
      }
    }); 
}
0
ответ дан 23 November 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: