Я пытаюсь найти лаконичный способ обхода всех строк и всех столбцов пустого массива и удаления строки или столбца, если все его значения равны, например, inf
.
Допустим, у меня есть следующий массив:
import numpy as np
m = np.array([[1,2,3,4],
[np.inf,np.inf,np.inf,np.inf],
[9,10,11,12]])
Тогда, если я использую,
row = 0
while row < m.shape[0]:
if np.all(np.isinf(m[row,:])):
m = np.delete(m,row,axis=0)
row -= 1
row += 1
print(m)
Я получу вывод:
[[1,2,3,4],
[9,10,11,12]]
Iможно использовать аналогичный метод для удаления столбца всего infs
.Однако этот метод довольно громоздкий, поэтому я попытался использовать следующее:
m = m[np.all(~np.isinf(m),axis=1)]
Это прекрасно работает при поиске и удалении всех строк infs
, но при попытке выполнить следующее, чтобы найти и удалить всестолбцы, которые содержат все infs
, метод сталкивается с проблемами,
m = np.array([[1,2,np.inf,4],
[5,6,np.inf,8],
[9,10,np.inf,12]])
m = m[np.all(~np.isinf(m),axis=0)]
, выдавая следующую ошибку
IndexError: boolean index did not match indexed array along dimension 0; dimension is 3 but corresponding boolean dimension is 4
Я думал, что использование axis=1
будет искать по каждой строке,и axis=0
будет искать по каждому столбцу, но мне кажется, что я не понимаю, как работает axis
.Любая помощь будет высоко ценится.