任何人都可以建议用0替换数组中的所有负值的简单方法吗?
我正在使用numpy数组完成一个完整的块
例如
a = array([1, 2, 3, -4, 5])
Run Code Online (Sandbox Code Playgroud)
我需要回来
[1, 2, 3, 0, 5]
Run Code Online (Sandbox Code Playgroud)
a < 0 得到:
[False, False, False, True, False]
Run Code Online (Sandbox Code Playgroud)
这就是我被困的地方 - 如何使用这个数组来修改原始数组
NPE*_*NPE 124
你在那里.尝试:
In [4]: a[a < 0] = 0
In [5]: a
Out[5]: array([1, 2, 3, 0, 5])
Run Code Online (Sandbox Code Playgroud)
sen*_*rle 84
试试numpy.clip:
>>> import numpy
>>> a = numpy.arange(-10, 10)
>>> a
array([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2,
3, 4, 5, 6, 7, 8, 9])
>>> a.clip(0, 10)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
Run Code Online (Sandbox Code Playgroud)
你可以只用下半部分剪辑clip(0).
>>> a = numpy.array([1, 2, 3, -4, 5])
>>> a.clip(0)
array([1, 2, 3, 0, 5])
Run Code Online (Sandbox Code Playgroud)
你可以只剪辑上半部分clip(max=n).(这比我之前的建议要好得多,其中涉及传递NaN给第一个参数并使用out强制类型.):
>>> a.clip(max=2)
array([ 1, 2, 2, -4, 2])
Run Code Online (Sandbox Code Playgroud)
另一个有趣的方法是使用where:
>>> numpy.where(a <= 2, a, 2)
array([ 1, 2, 2, -4, 2])
Run Code Online (Sandbox Code Playgroud)
最后,考虑一下艾克斯的回答.我更喜欢clip简单的操作,因为它是自我记录的,但他的答案更适合更复杂的操作.
另一个不使用numpy的极简主义Python解决方案:
[0 if i < 0 else i for i in a]
Run Code Online (Sandbox Code Playgroud)
无需定义任何额外功能.
a = [1, 2, 3, -4, -5.23, 6]
[0 if i < 0 else i for i in a]
Run Code Online (Sandbox Code Playgroud)
收益率:
[1, 2, 3, 0, 0, 6]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
81766 次 |
| 最近记录: |