В этом конкретном случае 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]
Это, что я придумал, так как я должен выполнить несколько операций в цепочке.
<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>
Я действительно смущен процессом... полагая, что у меня есть внутренняя функция, как может я возвращать внешней функции (истинный/ложный) результат!?!
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;
}
});
}