Удаление элементов массива в Python, отслеживая их положение - PullRequest
1 голос
/ 26 октября 2009

У меня есть два массива. Первый массив содержит несколько нулей (которые распределены случайным образом по длине массива), которые я хотел бы удалить.

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

Я только придумал очень громоздкий цикл. У кого-нибудь есть "элегантный" метод для этого?

Thx!

Ответы [ 2 ]

4 голосов
/ 26 октября 2009

Это то, что вы хотите? Я новичок NumPy.

In [1]: import numpy as np

In [2]: a = np.array([1,2,0,3,0,4])

In [3]: b = np.array([1,2,3,4,5,6])

In [4]: b[np.where(a)]  
Out[4]: array([1, 2, 4, 6])

In [5]: np.where(a)  
Out[5]: (array([0, 1, 3, 5]),)

In [6]: a[np.where(a)]  
Out[6]: array([1, 2, 3, 4])
0 голосов
/ 28 октября 2009

Вы можете использовать логическое индексирование. x! = 0 дает логический массив с True, где x! = 0 false, где x == 0. Если вы индексируете x или y с помощью этого массива (т.е. x_nozeros = x [x! = 0]), то вы получите только элементы, где x! = 0. например:

In [1]: import numpy as np
In [2]: x = np.array([1,2,0,3,0,4])
In [3]: y = np.arange(1,7)
In [4]: indx = x!=0
In [5]: x_nozeros = x[indx]
In [6]: y_nozeros = y[indx]
In [7]: x_nozeros
Out[7]: array([1, 2, 3, 4])
In [8]: y_nozeros
Out[8]: array([1, 2, 4, 6])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...