Я не уверен, правильно ли я вас понимаю. Если мое решение не соответствует вашим запросам, рассмотрите возможность добавления примера к вашему вопросу.
Следующий код удаляет все столбцы из массива s
, которые состоят только из значений, меньших tol
.
s = np.array([
[1, 0, 0, 0, 0, 0],
[0, .9, 0, 0, 0, 0],
[0, 0, .5, 0, 0, 0],
[0, 0, 0, .4, 0, 0],
[0, 0, 0, 0, .3, 0],
[0, 0, 0, 0, 0, .2]
])
print(s)
tol = .4
ind = np.argwhere(s.max(axis=1) < tol)
s = np.delete(s, ind, 1)
print(s)
Вывод:
[[1. 0. 0. 0. 0. 0. ]
[0. 0.9 0. 0. 0. 0. ]
[0. 0. 0.5 0. 0. 0. ]
[0. 0. 0. 0.4 0. 0. ]
[0. 0. 0. 0. 0.3 0. ]
[0. 0. 0. 0. 0. 0.2]]
[[1. 0. 0. 0. ]
[0. 0.9 0. 0. ]
[0. 0. 0.5 0. ]
[0. 0. 0. 0.4]
[0. 0. 0. 0. ]
[0. 0. 0. 0. ]]
Я применяю max
к оси 1, а затем использую np.argwhere
, чтобы получить индексы столбцов, где максимальное значение равно меньше чем tol
.
Редактировать: чтобы обрезать столбцы матрицы 'U', чтобы она по размеру совпадала с уменьшенной матрицей 'S', работает следующий код:
k = len(S[0])
Ured = U[:,0:k]
Uredsize = np.shape(Ured) # To check it has worked
print(Uredsize)