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

0 投票
3 回答
3393 浏览
提问于 2025-04-19 10:44

标题已经说明了一切。

假设我有一个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 个回答

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)),这样就能把小于 0.05 的值从 a 中删除。

另外,np.delete 也适用于多维数组。如果你在处理多维数据时,就需要更仔细地选择正确的 np.where

3

听起来你在说的是一个二维数组(根据你提到的“同时移除对应的列”这句话判断的)。

如果你创建一个布尔数组,叫做 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

在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这些问题可能是因为我们没有正确理解某些概念,或者在写代码时犯了一些小错误。

例如,变量就是一个很重要的概念。简单来说,变量就像一个盒子,我们可以把数据放进去,之后再从这个盒子里拿出来。每个盒子都有一个名字,这样我们才能知道里面装的是什么。

还有一个常见的概念是“循环”。循环就像是一个重复的动作,比如你想让程序做同样的事情很多次。就好比你在做作业时,写同样的题目多遍,循环可以让程序自动完成这些重复的工作。

在解决问题时,仔细检查代码是很重要的。很多时候,错误可能只是因为一个小小的拼写错误或者漏掉了一个符号。所以,慢慢来,认真看每一行代码,通常能找到问题所在。

总之,编程就像解谜一样,有时候需要耐心和细心。遇到问题时,不要急,先冷静下来,逐步分析,通常都能找到解决办法。

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

撰写回答