Как нормализовать массив в NumPy?

Был вопрос об этом совсем недавно для C # ... - читайте ответы там также, так как это в основном то же самое. Вы также можете найти последнее сообщение в блоге Эрика Липперта ; это, по крайней мере, около одной и той же области, хотя и имеет несколько другую направленность.

В принципе, для того, чтобы переменной присваивалось значение, прежде чем вы прочитаете, это хорошая вещь. Это означает, что вы случайно не прочитаете то, чего не хотели. Да, переменные могут иметь значения по умолчанию - но не лучше ли, чтобы компилятор смог поймать вашу ошибку, если это может доказать, что вы пытаетесь прочитать что-то, что еще не было назначено? Если вы хотите присвоить локальную переменную значение по умолчанию, вы всегда можете назначить это явно.

Теперь это нормально для локальных переменных, но, например, для статических переменных и переменных, компилятор не имеет способа узнать порядок в какие методы будут называться. Будет ли вызвано свойство «сеттер» перед «геттером»? Он не может знать, поэтому он не может предупредить вас об опасности. Вот почему значения по умолчанию - это , используемые для экземпляра / статические переменные - по крайней мере, тогда вы получите известное значение (0, false, null и т. Д.), А не просто «все, что было в памяти в то время «. (Он также устраняет потенциальную проблему безопасности чтения конфиденциальных данных, которые не были явно стерты.)

152
задан kmario23 27 April 2019 в 23:03
поделиться

1 ответ

Если Вы работаете с многомерным массивом после быстрого решения, возможно.

Говорят, что у нас есть 2D массив, который мы хотим нормализовать последней осью, в то время как некоторые строки имеют нулевую норму.

import numpy as np
arr = np.array([
    [1, 2, 3], 
    [0, 0, 0],
    [5, 6, 7]
], dtype=np.float)

lengths = np.linalg.norm(arr, axis=-1)
print(lengths)  # [ 3.74165739  0.         10.48808848]
arr[lengths > 0] = arr[lengths > 0] / lengths[lengths > 0][:, np.newaxis]
print(arr)
# [[0.26726124 0.53452248 0.80178373]
# [0.         0.         0.        ]
# [0.47673129 0.57207755 0.66742381]]
1
ответ дан 23 November 2019 в 21:10
поделиться
Другие вопросы по тегам:

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