Как эффективно вычесть значения из каждого столбца с NumPy

Вот почему динамически созданные элементы не реагируют на клики & nbsp;:

var body = $("body");
var btns = $("button");
var btnB = $("<button>B</button>");
// `<button>B</button>` is not yet in the document.
// Thus, `$("button")` gives `[<button>A</button>]`.
// Only `<button>A</button>` gets a click listener.
btns.on("click", function () {
  console.log(this);
});
// Too late for `<button>B</button>`...
body.append(btnB);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>A</button>

В качестве обходного пути вы должны прослушивать все клики и проверять исходный элемент & nbsp;:

var body = $("body");
var btnB = $("<button>B</button>");
var btnC = $("<button>C</button>");
// Listen to all clicks and
// check if the source element
// is a `<button></button>`.
body.on("click", function (ev) {
  if ($(ev.target).is("button")) {
    console.log(ev.target);
  }
});
// Now you can add any number
// of `<button></button>`.
body.append(btnB);
body.append(btnC);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>A</button>

Это называется «Event Delegation». Хорошие новости, это встроенная функция в jQuery: -)

var i = 11;
var body = $("body");
body.on("click", "button", function () {
  var letter = (i++).toString(36).toUpperCase();
  body.append($("<button>" + letter + "</button>"));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>A</button>

0
задан Gabriel Lefundes 28 March 2019 в 02:51
поделиться

1 ответ

Все ваши фрагменты кода указывают, что вы хотите, чтобы вычитание происходило только в первой строке A (хотя вы явно не упоминали об этом). Итак, я продолжаю с этим пониманием.

Обращаясь к использованию from_function(), вы можете использовать subtraction_matrix, как показано ниже:

A[0,1:] -= subtraction_matrix[1:]

Проверка его (принимая форму (5,5) вместо (50,50)):

import numpy as np

A = np.arange(25).reshape(5,5)
print (A)

func = lambda j: j * 10 #some simple calculations
subtraction_matrix = np.fromfunction(np.vectorize(func), (5,), dtype=A.dtype)

A[0,1:] -= subtraction_matrix[1:]
print (A)

Вывод:

[[ 0  1  2  3  4]        # print(A), before subtraction
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]
 [20 21 22 23 24]]

[[  0  -9 -18 -27 -36]   # print(A), after subtraction
 [  5   6   7   8   9]
 [ 10  11  12  13  14]
 [ 15  16  17  18  19]
 [ 20  21  22  23  24]]

Если вы хотите, чтобы вычитание происходило в всех строках A, вам просто нужно использовать строку A[:,1:] -= subtraction_matrix[1:] вместо линии A[0,1:] -= subtraction_matrix[1:]

0
ответ дан fountainhead 28 March 2019 в 02:51
поделиться
Другие вопросы по тегам:

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