2017-02-16 24 views
0

Я новичок в программировании. У меня в настоящее время есть массив с 1000+ элементами, я хочу получить доступ только к 10 из этих элементов за один раз и выполнить некоторые операции с этими элементами, а затем ввести следующий элемент в массиве в очередь и так далее. Один из способов, которым я мог подумать, - передать все элементы массива в очередь и добавить один элемент очереди и добавить его в новую очередь с максимальным размером 10.Анализ элементов массива в очереди с фиксированным размером Python

Но я сомневаюсь, что это правильный способ сделать Это. Любые выводы о том, как я должен подходить к этой проблеме? Код, который я написал до сих пор, создает очередь и принимает все элементы из массива. Я не уверен, что я должен делать дальше.

import numpy as np 
class Queue : 


    def __init__(self): 
     self.items=[] 

    def isEmpty(self) : 
     return self.items==[] 

    def enqueue(self, item): 
     self.items.insert(0,item) 

    def dequeue(self): 
     self.items.pop() 

    def size(self): 
     return len(self.items) 

    def printqueue(self): 
     for items in self.items: 
      print(items) 

q= Queue() 
a=np.linspace(0,1,1000) 
for i in np.nditer(a): 
    q.enqueue(i) 

Я знаю, что это глупо для экспертов, но просто хотел знать, как я могу это сделать самостоятельно. Редактировать: Это был не дублированный вопрос о blkproc. поскольку я пришел из фона C++, используя очередь, был на мой взгляд, но использование среза отлично работало.

+0

Возможный дубликат [Как я могу эффективно обрабатывать Numpy массив в блоках, похожий на blkproc от Matlab функции (blockproc)] (http://stackoverflow.com/questions/5073767/how -can-i-efficiently-process-a-numpy-array-in-blocks-like-to-matlabs-blkpro) – Torxed

+0

Или, может быть, это: http://stackoverflow.com/questions/19712919/combining-numpy-arrays- in-blockwise-form – Torxed

ответ

0

Я не думаю, что вам нужно в очередь. Почему бы просто не использовать кусочек:

# this is the function that is going to act on each group of 
# 10 data points 
def process_data(data): 
    print(data) 

slice_len = 10 

# here is your data. can be any length. 
al = [ii for ii in range(1000)] 

for ii in range((len(al) - 1)/slice_len + 1): 
    # take a slice from e.g. position 10 to position 20 
    process_data(al[(ii * slice_len):(ii + 1) * slice_len]) 
+0

Это именно то, что я пытался сделать, спасибо :) – srikarpv

0

Проверьте это:

import numpy as np 
arr = np.random.randn(1000) 
idx = 0 
while idx < len(arr): 
    sub_arr = arr[idx:idx + 10] 
    print(sub_arr) 
    idx += 10