Python根据某些条件从Numpy数组中删除列

时间:2014-09-02 18:30:55

标签: python arrays numpy

标题说明了一切。

假设我有一个包含总和为1的值的numpy数组。

[0.5  0.3  0.1  0.05  0.03  0.01]

我想删除小于0.05的数组的所有值 并同时删除相应的列,这将导致一个数组 像这样:

[0.5  0.3  0.1  0.05]

当然有办法实现这一目标。但我对代码我不满意 到目前为止生产。我觉得必须有一种优雅的方式来实现这一目标 蟒。

帮助

修改

感谢您的帮助。我觉得我已经走上正轨了。我只是没有 知道如何使用语法。不过不明白下来的选票。 :(

3 个答案:

答案 0 :(得分:2)

a = [0.5  0.3  0.1  0.05  0.03  0.01]
print a[a >= .05]

答案 1 :(得分:2)

听起来你有一个2D数组(根据短语判断,“并同时删除相应的列”)。

如果您创建一个布尔数组,idx对于您希望保留的列为True,那么您可以使用arr[:, idx]选择这些列:

import numpy as np
np.set_printoptions(formatter={'float': '{:0.2f}'.format})
np.random.seed(1)

arr = np.random.random((3,4))
mask = (arr < 0.05)
idx = mask.any(axis=0)
result = arr[:, ~idx]

print(arr)
# [[0.42 0.72 0.00 0.30]
#  [0.15 0.09 0.19 0.35]
#  [0.40 0.54 0.42 0.69]]

print(result)
# [[0.42 0.72 0.30]
#  [0.15 0.09 0.35]
#  [0.40 0.54 0.69]]

答案 2 :(得分:1)

numpy.delete是你的朋友

import numpy as np

a = np.array([0.5 , 0.3 , 0.1 , 0.05,  0.03,  0.01])
a = np.delete(a,np.where(a < 0.05))

np.delete(a, 1)将创建a的副本,然后从副本中删除a[1]a仍未受影响。 要强制更改a,请执行此操作 我们做a = np.delete(a,np.where(a < 0.05))

同样np.delete也适用于高维数组。 对于高维数据,您必须在选择正确的np.where

方面做更多工作