создание нового массива из существующего списка - PullRequest
1 голос
/ 24 января 2020

У меня есть данный массив, который я хочу взять каждое 3-е значение, начиная с 1-го значения, и добавить его в новый список. Я могу принять значения, которые я хотел бы, но он возвращает в виде 1 x 28 массива. Я хочу, чтобы он возвращался как массив 4 x 7. Как я могу сказать, что, когда он достигает конца первой строки, начинается новая строка?

Код:

import numpy as np

list = [
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
    [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21],
    [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22],
    [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
]
newlist = []
list = np.array(list)
for row in list:
    k = 0
    for value in row:
        if k % 3 == 0:
            newlist.append(value)
        else:
            pass
        k += 1
newlist = np.array(newlist)
print(newlist)

Выход:

[ 1  4  7 10 13 16 19  2  5  8 11 14 17 20  3  6  9 12 15 18 21  4  7 10 13 16 19 22]

Желаемый вывод:

[[ 1  4  7 10 13 16 19 ][ 2  5  8 11 14 17 20 ][ 3  6  9 12 15 18 21 ][ 4  7 10 13 16 19 22]]

Ответы [ 2 ]

1 голос
/ 24 января 2020

Вы должны иметь возможность напрямую индексировать это в ухабистой форме с помощью l[:,::3]:

import numpy as np

l = np.array([
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
    [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21],
    [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22],
    [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
])

l[:,::3]

Результат

array([[ 1,  4,  7, 10, 13, 16, 19],
       [ 2,  5,  8, 11, 14, 17, 20],
       [ 3,  6,  9, 12, 15, 18, 21],
       [ 4,  7, 10, 13, 16, 19, 22]])

(также не называйте ваша переменная list)

1 голос
/ 24 января 2020

Попробуйте использовать нарезку с ::3 с пониманием списка:

l = [
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
    [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21],
    [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22],
    [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
]
print(np.array([i[::3] for i in l]))

Чтобы узнать больше о нарезке, смотрите здесь:

Понимание обозначения среза

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...