2015-04-28 5 views
2

Я хотел бы создать массив numpy без создания списка в первую очередь.
На данный момент у меня есть это:Заполнить массив numpy без создания списка

import pandas as pd 
import numpy as np 

dfa = pd.read_csv('csva.csv') 
dfb = pd.read_csv('csvb.csv') 

pa = np.array(dfa['location']) 
pb = np.array(dfb['location']) 

ra = [(pa[i+1] - pa[i])/float(pa[i]) for i in range(9999)] 
rb = [(pb[i+1] - pb[i])/float(pb[i]) for i in range(9999)] 

ra = np.array(ra) 
rb = np.array(rb) 

Есть ли элегантный способ сделать один шаг последней заливку в этом нп массива без создания списка первого?

Благодаря

+0

Несколько шагов могут помочь 1) Опубликовать исходные данные 2) Ожидаемый результат. – Zero

+0

Вы также можете использовать 'dfa ['location']. Values' в palce of' np.array (dfa ['location']) ' – Zero

+0

Требуется задать один и тот же вопрос, но теперь я вижу, что ответа нет. – Ch3shire

ответ

3

Вы можете рассчитать с помощью векторов в NumPy, без списков:

ra = (pa[1:] - pa[:-1])/pa[:-1] 
rb = (pb[1:] - pb[:-1])/pb[:-1] 
0

numpy.zeros

Вернуть новый массив заданной формы и типа, заполненные нулями.

или

numpy.ones

Вернуть новый массив заданной формы и типа, заполненный единицами.

или

numpy.empty

Вернуть новый массив заданной формы и типа, без инициализации записей.

2

названия вашего вопроса и то, что вам нужно сделать в вашем конкретном случае, на самом деле являются две slighly разных вещей.

Чтобы создать Numpy массива без «литья» списка (или другой итерация), вы можете использовать один из нескольких методов, определенных самой NumPy, который возвращает массив:

  • np.empty, np.zeros, np.ones, np.full для создания массивов заданного размера с фиксированными значениями
  • np.random.* (где * может быть различными распределения, как нормальные, униформа, экспоненциальные ...), чтобы создать массивы заданного размера со случайными значениями

В общем, прочитать: Array creation routines

В вашем случае, у вас уже есть Numpy массивы (pa и pb), и вы не должны создавать списки для расчета новых массивов (ra и rb), вы можете напрямую работать с массивами numpy (это вся точка numpy: вы можете быстрее выполнять операции над массивами, которые будут выполняться по каждому элементу!).Скопировано из @Daniel's answer:

ra = (pa[1:] - pa[:-1])/pa[:-1] 
rb = (pb[1:] - pb[:-1])/pb[:-1] 

Это будет гораздо быстрее, чем вы текущую реализацию, а не только потому, что вам избежать преобразования списка ndarray, а потому, что Numpy массивы порядок magnuitude быстрее математических и пакетных операций чем итерация

Смежные вопросы