Список із мільйона цілих займає 38.6 МБ, масив int64 тієї самої довжини — 7.63 МБ. Що є головною причиною різниці?
int64 вміщує рівно ті самі значення. Резерв під append у списку теж є, але він додає відсотки, а не кратність.Виконали: тиждень = np.array([180, 195, 175, 205]); частина = тиждень[1:3]; частина[0] = 0. Що покаже print(тиждень)?
тиждень[1:3].copy().Масив продажі має форму (4, 7). Яка з операцій впаде з ValueError?
mean(axis=1) дає форму (4,). Транслювання порівнює форми з кінця: (4,) доповнюється зліва до (1, 4), і четвірка стикається з сімкою — жодне з чисел не дорівнює одиниці, тож розтягувати нема чого. Полагодити просто: mean(axis=1, keepdims=True) поверне форму (4, 1), і все складеться. Решта три варіанти поєднуються без жодних зусиль.У таблиці продажі форми (4, 7) рядки — це магазини, стовпці — дні. Як отримати підсумок за тиждень для кожного магазину, тобто чотири числа?
axis=k — це вісь, уздовж якої йде підсумовування, і саме вона зникає з форми. Нам потрібен результат форми (4,), тобто з (4, 7) має зникнути сімка — це вісь 1. Перший варіант спокусливий саме тим, що магазини справді лежать уздовж осі 0, але sum(axis=0) дасть сім чисел — по одному на день, а не на магазин.Чому цикл for по масиву NumPy виявляється приблизно вдвічі повільнішим за такий самий цикл по звичайному списку?
numpy.float64: виділити памʼять, заповнити заголовок, завести лічильник. Мільйон разів створити й одразу викинути. Саме тому правильна відповідь — не «швидший цикл», а відсутність циклу: векторна операція.Що поверне вираз (тиждень > 150).mean(), якщо тиждень = np.array([180, 195, 175, 205, 240, 120, 90])?
тиждень > 150 дає масив із dtype(ʼboolʼ), а True в Python дорівнює одиниці. Тому .sum() над маскою рахує скільки (тут 5), а .mean() — яка частка (5/7 ≈ 0.714). Щоб отримати 199.0, тобто середнє серед відібраних, треба спершу відібрати: тиждень[тиждень > 150].mean().Записали малі = np.array([100, 50, 25], dtype=np.int8), а потім малі * 3. Що станеться?
int8 вміщує лише −128…127, і при переповненні NumPy не кидає виняток і не розширює тип — він рахує по колу: 300 перетворюється на 44. Жодного повідомлення ти не побачиш, і саме тому тісний тип звужують лише усвідомлено й із запасом на проміжні обчислення. Обрізання по межі (варіант із 127) — це поведінка np.clip, а не звичайного множення.У масиві з_дірками = np.array([120.0, np.nan, 98.0]) треба знайти саму дірку. Який спосіб спрацює?
np.nan не дорівнює навіть сам собі — це вимога стандарту чисел з рухомою крапкою, тому порівняння завжди дасть суцільні False. Оператор is питає про тотожність обʼєктів і до вмісту масиву стосунку не має. Єдиний правильний інструмент — np.isnan, який повертає булеву маску; поруч із ним живе родина nansum, nanmean, nanmax, що просто пропускає дірки.