Документация описывает where
следующим образом:
Значения True указывают на то, что для вычисления ufunc в этой позиции, значения False указывают на то, чтобы оставить значение только в выходных данных. blockquote>
Давайте попробуем пример, используя параметр
out
:x = np.ones(3) np.negative(np.array([4.,5.,6.]), where=np.array([False,True,False]), out=x)
Это устанавливает
x
в[1., -5., 1.]
и возвращает то же самое.Это имеет некоторый смысл, если вы поймете, что «оставить значение в выходных данных» буквально означает, что выходное значение «не волнует», а не «совпадает с входным» (последняя интерпретация заключалась в том, как прочитайте это тоже в первый раз).
Проблема возникает, когда вы указываете
where
, но неout
. По-видимому, « ufunc machinery » (который не виден в реализацииnp.negative()
) создает пустой выходной выходной массив, то есть значения являются неопределенными. Таким образом, местоположения, в которыхwhere
равно False, будут иметь неинициализированные значения, которые могут быть чем угодно.Мне кажется, это неправильно, но в прошлом году была опубликована проблема NumPy , которая была закрыта. Кажется маловероятным, что он изменится, поэтому вам придется обходить его (например, самостоятельно создавая выходной массив с помощью
zeros
).
Ваш код выглядит хорошо. Но знайте, что sreg расширение, которое Вы используете, не поддерживается всей операцией в секунду. Если OP, с которым Вы проходите проверку подлинности, не будет поддерживать его, то расширение ответа будет пустым, как Вы видите. Таким образом, пустая проверка всегда является хорошей идеей.
myopenid.com поддерживает sreg при поиске OP для тестирования против.
С latests версией DotNetOpenId этот код, кажется, хорошо работает для меня:
var request = openid.CreateRequest(openid_identifier);
var fields = new ClaimsRequest();
fields.Email = DemandLevel.Require;
fields.Nickname = DemandLevel.Require;
request.AddExtension(fields);
request.RedirectToProvider();
по возврату от поставщика:
var claimResponse = openid.Response.GetExtension<ClaimsResponse>();
PS: я использую MVC, не WebForms.