Маскируйте нулевые значения в матрице и восстанавливайте исходную матрицу, используя индексы - PullRequest
1 голос
/ 14 октября 2019

В случае, если у нас есть

indice=[0 0 1 1 0 1]; 

и

X=[0 0 0;0 0 0;5 8 9;10 11 12; 0 0 0; 20 3 4],

, я хотел бы использовать индекс, чтобы замаскировать значение 0 в X и получить Xx=[5 8 9;10 11 12; 20 3 4], а затем из Xx, мывернуться к исходному измерению newX=[0 0 0;0 0 0;5 8 9;10 11 12; 0 0 0; 20 3 4]

for i in range(3):
    a=X[:,i];
Xx[:,i]=a[indice]; 

- и вернуться к исходному измерению:

  for ii in range(3)
    aa=Xx[:,ii]
    bb[indice]=aa
    newX[:,ii]=bb

Не могли бы вы помочь мне решить эту проблему с помощью Python?

1 Ответ

0 голосов
/ 14 октября 2019

Используя numpy.where жизнь намного проще.

X=np.array([[0 ,0 ,0],[0, 0, 0],[5, 8, 9],[10, 11, 12],[ 0, 0 ,0],[ 20, 3, 4]])

index = np.where(X.any(axis=1))[0] # find rows with all 0s

print(X[index])
#array([[ 5,  8,  9],
#       [10, 11, 12],
#       [20,  3,  4]])

РЕДАКТИРОВАТЬ:

Если вы действительно хотите восстановить его, и на основе того факта, чтоВы знаете, что удалили строки со всеми 0, затем:

Создайте новую матрицу со всеми 0:

X_new = np.zeros(X.shape)

и вставьте значения там, где они должны быть:

X_new[index] = X[index]

Теперь проверьте X_new:

X_new

array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 5.,  8.,  9.],
       [10., 11., 12.],
       [ 0.,  0.,  0.],
       [20.,  3.,  4.]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...