python:替换从文件读取的数组中的负值

时间:2016-02-02 08:35:33

标签: python arrays replace where

我填充数组,从文件中读取数据:

输入:

2
4
-8
5
-2

代码:

f = [ i.strip() for i in open('file.txt', 'r') ]
a = []

for line in f:
   line = line.split()
   a.append(float(line[0]))

生成向量a=[2,4,-8,5,-2]。现在我想用值+10替换所有负值,以获得向量b=[2,4,2,5,8]。如果不使用循环或for循环,我该怎么做?我尝试使用np.where()函数和a[a<0],但它们不会产生任何结果(如果我从头创建np.array[2,4,-8,5,-2],它们就可以正常工作...)。提前谢谢。

4 个答案:

答案 0 :(得分:4)

一种不使用numpy的方法

a = list(map(lambda x:x+10 if x < 0 else x, a))

答案 1 :(得分:2)

你可以让a成为一个numpy数组:

a = np.array(a)

然后简单地做:

a[a<0] += 10

答案 2 :(得分:2)

可以在不使用NumPy的情况下使用列表理解来完成。假设你有数字列表a:

>>> a = [2, 4, -8, 5, -2]
>>> [number if number >= 0 else number + 10 for number in a]
[2, 4, 2, 5, 8]

答案 3 :(得分:1)

如果你允许使用numpy:

import numpy as np

f = [ i.strip() for i in open('C:/Users/simon/Desktop/file.txt', 'r') ]
a = []

for line in f:
   line = line.split()
   a.append(float(line[0]))

a = np.array(a)

print a

a[a<0] = a[a<0] + 10

print a

那会给你:

[ 2.  4. -8.  5. -2.]
[ 2.  4.  2.  5.  8.]