【问题标题】:Formatting an array of float values in Numpy Python在 Numpy Python 中格式化浮点值数组
【发布时间】:2021-02-16 07:24:20
【问题描述】:

如果在Int array 输出中看到的数字小于 0,则函数 values[(values<=0).argmin():] = 0 将从第 n 个元素到最后一个元素的值变为零。但是,当数组元素为浮点数时,数组会在float array 输出中自动转换为零。我该如何解决这个问题?

浮点数组

Numbers = np.array([123.6 , 123.6 ,  123.6, 110.3748 ,  111.6992976, 102.3165566,  97.81462811])
Numbers[(Numbers>=-50).argmin():] = 0

输出

[ 10   3 -20   0   0   0]

整数数组

import numpy as np
values = np.array([123 , 123 , -123.6,  110,  111])
values[(values<=0).argmin():] = 0

输出:

[123 , 123 , 0,  0,  0]

【问题讨论】:

  • 你想达到什么目的,第一个输出代表什么?
  • 在插入 0 之前查看values。

标签: python numpy


【解决方案1】:

编辑:

试试这两种方法,一种是在原地分配给 NumPy 视图,另一种是创建一个新数组以分配给另一个变量 -

#Method 1 (Inplace assignment)
Numbers[(Numbers<=0).cumsum(dtype=bool)] = 0

#OR

#Method 2 (Not inplace)
np.where(~(Numbers<=0).cumsum(dtype=bool), Numbers, 0)

解释-

  1. 返回[F, F, F, T, F, F, F]的bool数组可以看成一个1和0的数组。执行 cumsum 最终会将第一个 T 传播到后续元素。

  2. 因此,这会将数组转换为 [F, F, F, T, T, T, T],它现在可以与 boolean indexing 一起使用,并将视图设置为 0 或 np.where 以获取原始元素或 0,基于使用 ~ 反转布尔值

  3. 这里的好处是,如果你的数组只是由 False 组成,意味着没有元素满足条件,它只会返回原始的Numbers 本身,而不是将它们设置为 0。


运行测试 -

  1. 具有满足条件的值
Numbers = np.array([123.6 , 123.6 ,  -123.6, 110.3748 ,  111.6992976, 102.3165566,  97.81462811])

Numbers[(Numbers<=0).cumsum(dtype=bool)] = 0

#array([123.6, 123.6,   0. ,   0. ,   0. ,   0. ,   0. ])
  1. 没有符合条件的值
Numbers = np.array([123.6 , 123.6 ,  123.6, 110.3748 ,  111.6992976, 102.3165566,  97.81462811])

Numbers[(Numbers<=0).cumsum(dtype=bool)] = 0

#array([123.6 , 123.6 , 123.6 , 110.3748 ,111.6992976 , 102.3165566 ,  97.81462811])

【讨论】:

  • 我发现这个函数的问题是,如果没有一个元素符合标准,它只会将所有数字变成零。
  • 如果你能看一下,我会再写一个关于这个的问题,我将不胜感激:stackoverflow.com/questions/66233741/…
  • 更新了我的答案,以及备用线程
  • 这是否如您所愿?你能理解它背后的逻辑吗?请告诉我。
  • 是的,谢谢,抱歉回复晚了
猜你喜欢
  • 2016-10-05
  • 2014-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-08
  • 1970-01-01
  • 2019-06-27
  • 2019-10-03
相关资源
最近更新 更多