Bor*_*lik 62 python numpy scipy
我想删除numpy.array中的选定列.这就是我做的:
n [397]: a = array([[ NaN, 2., 3., NaN],
.....: [ 1., 2., 3., 9]])
In [398]: print a
[[ NaN 2. 3. NaN]
[ 1. 2. 3. 9.]]
In [399]: z = any(isnan(a), axis=0)
In [400]: print z
[ True False False True]
In [401]: delete(a, z, axis = 1)
Out[401]:
array([[ 3., NaN],
[ 3., 9.]])
Run Code Online (Sandbox Code Playgroud)
在此示例中,我的目标是删除包含NaN的所有列.我希望最后一个命令导致:
array([[2., 3.],
[2., 3.]])
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
Ste*_*joa 80
鉴于其名称,我认为标准方式应该是delete
:
import numpy as np
A = np.delete(A, 1, 0) # delete second row of A
B = np.delete(B, 2, 0) # delete third row of B
C = np.delete(C, 1, 1) # delete second column of C
Run Code Online (Sandbox Code Playgroud)
Nik*_*ick 19
numpy文档中的示例:
>>> a = numpy.array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
>>> numpy.delete(a, numpy.s_[1:3], axis=0) # remove rows 1 and 2
array([[ 0, 1, 2, 3],
[12, 13, 14, 15]])
>>> numpy.delete(a, numpy.s_[1:3], axis=1) # remove columns 1 and 2
array([[ 0, 3],
[ 4, 7],
[ 8, 11],
[12, 15]])
Run Code Online (Sandbox Code Playgroud)
unu*_*tbu 13
另一种方法是使用蒙版数组:
import numpy as np
a = np.array([[ np.nan, 2., 3., np.nan], [ 1., 2., 3., 9]])
print(a)
# [[ NaN 2. 3. NaN]
# [ 1. 2. 3. 9.]]
Run Code Online (Sandbox Code Playgroud)
np.ma.masked_invalid方法返回一个掩码数组,其中nans和infs被屏蔽掉:
print(np.ma.masked_invalid(a))
[[-- 2.0 3.0 --]
[1.0 2.0 3.0 9.0]]
Run Code Online (Sandbox Code Playgroud)
np.ma.compress_cols方法返回一个二维数组,其中任何列都包含一个被屏蔽的值:
a=np.ma.compress_cols(np.ma.masked_invalid(a))
print(a)
# [[ 2. 3.]
# [ 2. 3.]]
Run Code Online (Sandbox Code Playgroud)
请参阅 操纵-maskedarray
这会创建另一个没有这些列的数组:
b = a.compress(logical_not(z), axis=1)
Run Code Online (Sandbox Code Playgroud)
根据您的情况,您可以使用以下方法提取所需的数据:
a[:, -z]
Run Code Online (Sandbox Code Playgroud)
“-z”是布尔数组“z”的逻辑非。这与:
a[:, logical_not(z)]
Run Code Online (Sandbox Code Playgroud)
小智 6
来自Numpy文档
np.delete(arr,obj,axis = None)沿着删除的轴返回一个包含子数组的新数组.
>>> arr
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
>>> np.delete(arr, 1, 0)
array([[ 1, 2, 3, 4],
[ 9, 10, 11, 12]])
>>> np.delete(arr, np.s_[::2], 1)
array([[ 2, 4],
[ 6, 8],
[10, 12]])
>>> np.delete(arr, [1,3,5], None)
array([ 1, 3, 5, 7, 8, 9, 10, 11, 12])
Run Code Online (Sandbox Code Playgroud)