根据条件从Numpy数组中删除列
标题已经说明了一切。
假设我有一个numpy数组,里面的值加起来等于1。
[0.5 0.3 0.1 0.05 0.03 0.01]
我想要去掉这个数组中所有小于0.05的值,同时也要去掉这些值所在的列,这样最后得到的数组应该是这样的:
[0.5 0.3 0.1 0.05]
当然,有很多方法可以做到这一点。但我对目前写的代码不太满意。我觉得用Python应该有更优雅的方式来实现这个。
谢谢大家的帮助。
编辑:
感谢大家的帮助。我觉得我已经在正确的方向上了,只是还不太会用语法。不过我不太明白为什么会有负评价。 :(
3 个回答
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))
,这样就能把小于 0.05 的值从 a
中删除。
另外,np.delete
也适用于多维数组。如果你在处理多维数据时,就需要更仔细地选择正确的 np.where
。
听起来你在说的是一个二维数组(根据你提到的“同时移除对应的列”这句话判断的)。
如果你创建一个布尔数组,叫做 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]]
在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这些问题可能是因为我们没有正确理解某些概念,或者在写代码时犯了一些小错误。
例如,变量就是一个很重要的概念。简单来说,变量就像一个盒子,我们可以把数据放进去,之后再从这个盒子里拿出来。每个盒子都有一个名字,这样我们才能知道里面装的是什么。
还有一个常见的概念是“循环”。循环就像是一个重复的动作,比如你想让程序做同样的事情很多次。就好比你在做作业时,写同样的题目多遍,循环可以让程序自动完成这些重复的工作。
在解决问题时,仔细检查代码是很重要的。很多时候,错误可能只是因为一个小小的拼写错误或者漏掉了一个符号。所以,慢慢来,认真看每一行代码,通常能找到问题所在。
总之,编程就像解谜一样,有时候需要耐心和细心。遇到问题时,不要急,先冷静下来,逐步分析,通常都能找到解决办法。
a = [0.5 0.3 0.1 0.05 0.03 0.01]
print a[a >= .05]