Сортировать элементы в ndarray в python - PullRequest
0 голосов
/ 14 сентября 2018

Я хочу отсортировать элементы в массиве, скажем,

import numpy as np
np.random.seed(19680801)
a=np.random.randint(3,size=49).reshape(7,7)

, но сейчас я хочу поместить их в разные группы на основе значения третьего или промежуточного измерений.Например, для элементов строки в.Если element [3] = 0 и element [4] = 0, поместите его в группу 1;Если элемент [3] = 0 и элемент [4] = 1, поместите его в группу 2 и т. Д. *

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

В моей системе ваш код выдает

a = np.array([[0, 0, 0, 1, 2, 0, 2],
             [2, 2, 1, 0, 2, 2, 0],
             [1, 2, 1, 0, 1, 2, 2],
             [1, 0, 0, 0, 2, 1, 0],
             [1, 1, 0, 2, 0, 0, 0],
             [2, 2, 2, 1, 0, 2, 2],
             [0, 2, 2, 2, 2, 1, 0]])

Вы можете получить доступ a, используя такое условие:

a[a[:,3]==0]
Out[14]: 
array([[2, 2, 1, 0, 2, 2, 0],
       [1, 2, 1, 0, 1, 2, 2],
       [1, 0, 0, 0, 2, 1, 0]])

, и вы можете использовать логические операторы для объединения условий ввам нравится.В вашем случае вы хотите, например, все строки, которые имеют 0 по индексу 3 и 4 (примечание: ни одна строка не соответствует этому критерию):

a[(a[:,3]==0) & (a[:,4]==0)]
Out[16]: array([], shape=(0, 7), dtype=int64)

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

g1 = a[(a[:,3]==0) & (a[:,4]==0)]
# Same logic for any other groups you want
0 голосов
/ 14 сентября 2018

Может как то так?

g1, g2, g3 = [], [], [] # init groups 1, 2, 3 as empty lists
for e in a:
    if e[3] == 0 and e[4] == 0:
        g1.append(e)
    elif e[3] == 0 and e[4] == 1:
        g2.append(e)
    else:
        g3.append(e)

Результат:

>print(g1)
[]

>print(g2)
[array([1, 2, 1, 0, 1, 2, 2])]

>print(g3)
[array([0, 0, 0, 1, 2, 0, 2]),
 array([2, 2, 1, 0, 2, 2, 0]),
 array([1, 0, 0, 0, 2, 1, 0]),
 array([1, 1, 0, 2, 0, 0, 0]),
 array([2, 2, 2, 1, 0, 2, 2]),
 array([0, 2, 2, 2, 2, 1, 0])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...