我填充数组,从文件中读取数据:
输入:
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]
,它们就可以正常工作...)。提前谢谢。
答案 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.]