问题
Similar to this question I would like to remove some NAN's from a 2-D numpy array. However, instead of removing an entire row that has NAN's I want to remove the corresponding element from each row of the array. For example (using list format for simplicity)
x=[ [1,2,3,4],
[2,4,nan,8],
[3,6,9,0] ]
would become
x=[ [1,2,4],
[2,4,8],
[3,6,0] ]
I can imagine using a numpy.where
to figure out where in each row the NAN's appear and then use some loops and logic statements to make a new array from the old array (skipping over the NAN's and the corresponding elements in the other rows) but that to me doesn't seem to be a very streamlined way to do things. Any other ideas?
回答1:
You could use boolean indexing to select only those columns which do not contain nan
:
>>> x[:, ~np.isnan(x).any(axis=0)]
array([[ 1., 2., 4.],
[ 2., 4., 8.],
[ 3., 6., 0.]])
(This is nearly identical to the answer you've linked to; only the axes have been switched.)
来源:https://stackoverflow.com/questions/29438329/removing-nans-from-numpy-2-d-arrays