Для цикла для массива - PullRequest
0 голосов
/ 24 июня 2018

У меня есть массив vAgarch, и я пытаюсь извлечь из него каждый элемент, поэтому теперь у меня есть следующий код:

vAgarch = [0.05, 0.03, 0.04, 0.05, 0.03, 0.04]
vAgarch = np.array(vAgarch)

# Extract each element from array vAgarch
dA1garch = np.fabs(vAgarch[0])
dA2garch = np.fabs(vAgarch[1])
dA3garch = np.fabs(vAgarch[2])
dA4garch = np.fabs(vAgarch[3])
dA5garch = np.fabs(vAgarch[4])
dA6garch = np.fabs(vAgarch[5])

Однако это может быть проще, не так ли? В дальнейшем мой массив будет состоять из 40 элементов, и я думаю, что этот код можно упростить с помощью цикла for. Я перепробовал несколько циклов, но пока безуспешно. Есть ли кто-нибудь, кто может помочь мне упростить этот код?

Ответы [ 4 ]

0 голосов
/ 25 июня 2018

Просто

arr = np.fabs(vAgarch)

достаточно. В numpy почти все параметры функции могут быть array_like (список или массив numpy) и возвращать массив.

Так что нет необходимости использовать для цикла. Я рекомендую вам узнать больше о работе с массивом numpy.

0 голосов
/ 25 июня 2018

Нет необходимости использовать цикл for. Параметры numpy fabs могут быть array_like, так что вы можете просто передать ему список. Как показано ниже код (у меня есть некоторые элементы в vAgarch на минус):

def test_s():
    vAgarch = [-0.05, 0.03, -0.04, 0.05, 0.03, 0.04]
    print vAgarch
    # [-0.05, 0.03, -0.04, 0.05, 0.03, 0.04]

    # equivalent to a for loop
    arr2 = np.fabs(vAgarch)
    print arr2   # arr2 is a new array, all its elements is plus
    # [ 0.05  0.03  0.04  0.05  0.03  0.04]

    print vAgarch[0]
    # -0.05
    print arr2[0]
    # 0.05

вы также можете увидеть учебник в https://docs.scipy.org/doc/numpy/reference/generated/numpy.fabs.html.

Или, если вы используете pycharm, вы можете перейти к определению функции, например:

enter image description here

enter image description here

0 голосов
/ 25 июня 2018

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

Как уже упоминал Джейхелло, вы можете напрямую указать исходный массив numpy для np.fabs().В комментарии вы заявили, что не хотите получать список, поскольку хотите добавить эти значения и в другой список, но это также возможно для списков, использующих np.append().Допустим, массив, к которому вы хотите добавить их, это master_array, вы можете сделать что-то вроде этого:

import numpy as np

# other code here

new_arr = np.fabs(vAgarch)
master_array = np.append(master_array, new_arr)

Это добавит каждый элемент из списка vAgarch в другой список после вызова fabs() на них.Если вы хотите добавить только определенные элементы массива, вы можете просто ссылаться на них по индексу (например, new_arr[2]), а не создавать отдельные переменные для каждого отдельного элемента.

0 голосов
/ 24 июня 2018

Можно использовать цикл, если вы не используете отдельные имена переменных для dAgarch.

vAgarch= [0.05, 0.03, 0.04, 0.05, 0.03, 0.04]
dAgarch=np.zeros(vAgarch.size)
vAgarch= np.array(vAgarch)

# Extract each element from array vAgarch
count =0
while(count<dAgarch.size):
    dAgarch[count]= np.fabs(vAgarch[count])
    count+=1

Или, как вы просите петли

for count in range(0,dAgarch.size):
    dAgarch[count]= np.fabs(vAgarch[count])
...