2015-11-30 2 views
1

Я работаю с функцией, которая выводит массив numpy около 600 элементов.Добавление массивов по именам массивов

array = function_output() 
array.shape # this outputs (600,) 

Мне нужно работать с 50 выходами этой функции. Каждый выход отличается. Цель состоит в том, чтобы объединить каждый из этих массивов вместе в список (или массив numpy), а затем сохранить результаты.

Я сдуру начал маркируя каждый массив отдельно, т.е.

array1 = function_output() 
array2 = function_output() 
... 

, и тогда я думал, что я мог бы объединить это в список, т.е.

list = [array1, array2, array3, ..., array50] 

(1) Я не думаю, что есть какая-либо сначала по схеме именования. Каждый выход функции уникален и должен быть соответствующим образом маркирован.

(2) Однако, глупо определять этот список, копировать и вставлять. Могу ли я каким-то образом использовать оператор 'for' для перебора имен переменных?

ответ

3

Всякий раз, когда вы пронумеровали имена переменных, думать об использовании списка вместо:

output = [function_output() for i in range(50)] 

Вместо доступа первый массив с array1 вы будете использовать output[0] вместо (так как Python использует 0 на основе индексации.)

Чтобы объединить список массивов в один массив NumPy можно затем использовать

array = np.column_stack(output) 

array.shape бы т курица будет (600, 50).

+1

К сожалению, я не думаю, что это работает. Я должен сделать это более четким, но каждый выход функции уникален. Я должен ввести несколько параметров, чтобы он работал правильно. – ShanZhengYang

+2

@ShanZhengYang: Входы также должны быть в списке или, возможно, потоковом из какого-либо файла данных. – user2357112

+1

@ user2357112 Конечно! спасибо – ShanZhengYang

0

Я не совсем уверен, как настроен ваш код, но мне кажется, что вы можете использовать методы locals() или globals() для python. Например:

from random import choice as rc 

    #randomly populate the arrays 
    array1 = rc(range(20)) 
    array2 = rc(range(20)) 
    array3 = rc(range(20)) 
    array4 = rc(range(20)) 
    array5 = rc(range(20)) 
    array5 = rc(range(20)) 

    unwanted_variable1 = rc(range(20)) 
    unwanted_variable2 = rc(range(20)) 

    local_variables = locals() 
    local_keys = list(local_variables.keys()) 
    wanted_keys = [i for i in local_keys if i[0:5] == 'array'] 
    # sort the wanted keys numerically 
    current_order = [int(i[5:]) for i in wanted_keys] 
    desired_order = current_order.copy() 
    desired_order.sort() 
    ordered_keys = [wanted_keys[current_order.index(i)] for i in desired_order] 

    my_list = [local_variables[i] for i in ordered_keys if i[0:5] == 'array'] 

Я уверен, что это можно было сделать немного немного чище, но я думаю, что он получает представление в поперечнике.

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