Понимание представлений / копий массивов Python: почему не работает двойной логический индекс?

Nick R спросил: 13 октября 2017 в 07:23 в: python

Я читаю http://scipy-cookbook.readthedocs.io/items/ViewsVsCopies.html (и http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus -copy) и пытаясь понять, почему Python не пытается интуитивно интерпретировать последнюю строку в следующем,

import numpy as np
import pandas as pd
n = 100
tested = np.zeros(n, dtype=bool)
dt = pd.DatetimeIndex([pd.datetime(2000, 1, 1, 0, 0, 0, 0) 
    + pd.Timedelta(minutes=idx) for idx in range(n)])data = np.random.normal(size=n)
data[np.random.uniform(size=n) > 0.9] = np.nan
mask = np.isnan(data)dt_ = dt[~mask]
data_ = data[~mask]
select = pd.DatetimeIndex(dt_) > pd.datetime(2000, 1, 1, 1, 0, 0)
data__ = data_[select]  # do something with this later, otherwise, why mask?tested[~mask][select] = True # or np.ones(select.sum(), dtype=bool)

т.е., пожалуйста, боги Python, обновите эти элементы tested маскируется первыми и вторыми логическими массивами. Весьма досадно, что первая логическая маска возвращает copy (спасибо за catch @ user2357112) массива tested, который при индексации и обновлении вторым не запишите результаты обратно в исходный массив. Я думаю, что я прав, говоря, что некоторые другие интерпретируемые языки используют такой синтаксис, почему бы и нет? Или, может быть, есть некоторые передовые практики в области компьютерных наук, которые я не правильно понимаю? В то время как на самом деле происходит то, что tested по-прежнему является вектором логического числа всех False.

0 ответов