Значение, присвоенное элементу массива, получается равным нулю - PullRequest
0 голосов
/ 20 октября 2018

Вопрос: Почему элемент списка, которому я назначаю ненулевое значение, становится нулем?

Имеет список с именем eta, который содержит много различных значений.С этим списком хочется составить новый список a, в котором каждый элемент a[i] равен eta[i+1]-eta[i].Значение для eta[i+1]-eta[i] может быть вычислено и может проверить, что оно дает мне ненулевое значение, но когда я делаю цикл for и запускаю его for i в некотором диапазоне, он устанавливает a[i] = 0 по некоторым причинам.

Вот код:

import numpy as np

a = np.arange(5)
for i in range(5):
    a[i] = eta[i+1]-eta[i]

Попытка печати значений для eta[i+1]-eta[i] для каждого шага, и он получается как ненулевое число, но если вывести a[i], он получится какнуль. Скриншот кода с принтами .

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

Вам необходимо указать тип данных при вызове np.arange (), иначе это будет означать, что индексы должны быть целочисленными, поскольку передаваемый параметр равен 5 (целое число).

Примерно так будетработа.

a = np.arange(5, dtype='float')

Подробнее о dtypes можно узнать здесь: https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.dtype.html#numpy.dtype

0 голосов
/ 20 октября 2018

Проблема в том, что arange создает массив целых чисел, поэтому, когда вы пытаетесь присвоить ему значения с плавающей запятой, усекает его до целого числа.Поскольку все ваши значения находятся в диапазоне от 0 до 1, они превращаются в нули.

...