我有像这样的numpy数组,其中我有一列和一行ZEROS:
([[0. , 2.8, 3.5, 0. , 2.5, 1. , 0.8],
[0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[3.5, 2.5, 0. , 0. , 2.8, 1.3, 1.1],
[3.6, 3.8, 3.3, 0. , 2.5, 0.6, 0.4],
[2.5, 1.5, 2.8, 0. , 0. , 3.1, 1.9],
[1. , 0.8, 1.3, 0. , 3.1, 0. , 2.8],
[0.8, 1.6, 1.1, 0. , 1.9, 2.8, 0. ]])
我想将零行移到顶部,将零列移到左侧或删除它:
([[0. , 0. , 0. , 0. , 0. , 0. ]
[0. , 2.8, 3.5, 2.5, 1. , 0.8],
[3.5, 2.5, 0. , 2.8, 1.3, 1.1],
[3.6, 3.8, 3.3, 2.5, 0.6, 0.4],
[2.5, 1.5, 2.8, 0. , 3.1, 1.9],
[1. , 0.8, 1.3, 3.1, 0. , 2.8],
[0.8, 1.6, 1.1, 1.9, 2.8, 0. ]])
任何快速简便的方法吗? 顺便说一下,我知道col&行号,所以我不必搜索它。
答案 0 :(得分:2)
删除列和行并添加回一行零。
这适用于您的示例:
import numpy as np
a = np.array([[0. , 2.8, 3.5, 0. , 2.5, 1. , 0.8],
[0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[3.5, 2.5, 0. , 0. , 2.8, 1.3, 1.1],
[3.6, 3.8, 3.3, 0. , 2.5, 0.6, 0.4],
[2.5, 1.5, 2.8, 0. , 0. , 3.1, 1.9],
[1. , 0.8, 1.3, 0. , 3.1, 0. , 2.8],
[0.8, 1.6, 1.1, 0. , 1.9, 2.8, 0. ]])
def remove_column_of_zeros_and_shift_row(a, row, col):
without_row = np.delete(a, row, axis=0)
without_row_and_col = np.delete(without_row, col, axis=1)
z = np.zeros((1, len(without_row_and_col[0])))
without_col_shifted_row = np.append(z, without_row_and_col, axis=0)
return without_col_shifted_row
my_result = remove_column_of_zeros_and_shift_row(a, 1, 3)
答案 1 :(得分:2)
将高级索引与np.ix_
一起使用:
>>> import numpy as np
>>>
>>> X = np.array( ([[0. , 2.8, 3.5, 0. , 2.5, 1. , 0.8],
... [0. , 0. , 0. , 0. , 0. , 0. , 0. ],
... [3.5, 2.5, 0. , 0. , 2.8, 1.3, 1.1],
... [3.6, 3.8, 3.3, 0. , 2.5, 0.6, 0.4],
... [2.5, 1.5, 2.8, 0. , 0. , 3.1, 1.9],
... [1. , 0.8, 1.3, 0. , 3.1, 0. , 2.8],
... [0.8, 1.6, 1.1, 0. , 1.9, 2.8, 0. ]]))
>>>
>>> row = 1; col = 3
>>> h, w = X.shape
>>> i = np.r_[row, :row, row+1:h]
>>> j = np.r_[:col, col+1:w]
>>> X[np.ix_(i, j)]
array([[0. , 0. , 0. , 0. , 0. , 0. ],
[0. , 2.8, 3.5, 2.5, 1. , 0.8],
[3.5, 2.5, 0. , 2.8, 1.3, 1.1],
[3.6, 3.8, 3.3, 2.5, 0.6, 0.4],
[2.5, 1.5, 2.8, 0. , 3.1, 1.9],
[1. , 0.8, 1.3, 3.1, 0. , 2.8],
[0.8, 1.6, 1.1, 1.9, 2.8, 0. ]])