gpt4 book ai didi

python - 在numpy中过滤掉具有零值的列

转载 作者:太空狗 更新时间:2023-10-30 01:58:59 24 4
gpt4 key购买 nike

给定一个 numpy 数组 A 例如:

[[    0.   482.  1900.   961.   579.    56.]
[ 0. 530. 1906. 914. 584. 44.]
[ 43. 0. 1932. 948. 556. 51.]
[ 0. 482. 1917. 946. 581. 52.]
[ 0. 520. 1935. 878. 589. 55.]]

我想得到一个排除所有出现 0 的列的新数组,即:

[[  1900.   961.   579.    56.]
[ 1906. 914. 584. 44.]
[ 1932. 948. 556. 51.]
[ 1917. 946. 581. 52.]
[ 1935. 878. 589. 55.]]

我试过的是:

non_zero = np.array([np.all(totals>0,axis=0)]*N_ROWS);    

这给了我:

[[False  False  True  True  True  True]
[False False True True True True]
[False False True True True True]
[False False True True True True]
[False False True True True True]]

问题是,A[non_zero] 返回预期值重新排列成一维向量。

所以,你们知道我做错了什么,或者我是否让生活变得过于复杂?谢谢!

更新:感谢您的所有回答!除了已接受的答案之外还有一件简短的事情:显然,除了选择本身之外,我应该使用 : 操作数,如:

non_zero = np.array(np.all(totals!=0,axis=0));    
a[:,non_zero]

当然,还有更紧凑的方法(参见已接受的答案)

最佳答案

这里假设你的值是非负的:

A = np.array([[ 0, 482, 1900, 961, 579, 56.],
[ 0, 530, 1906, 914, 584, 44.],
[ 43, 0, 1932, 948, 556, 51.],
[ 0, 482, 1917, 946, 581, 52.],
[ 0, 520, 1935, 878, 589, 55.]])

A[:, np.all(A > 0, axis=0)]

这给了我

array([[ 1900.,   961.,   579.,    56.],
[ 1906., 914., 584., 44.],
[ 1932., 948., 556., 51.],
[ 1917., 946., 581., 52.],
[ 1935., 878., 589., 55.]])

如果您忽略潜在的精度问题,您可以将条件替换为 np.any(A == 0, axis=0)

关于python - 在numpy中过滤掉具有零值的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20522156/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com