查找特定值并由其他人替换它们。蟒蛇

时间:2013-10-27 13:52:16

标签: python arrays matlab for-loop numpy

我是编程新手。我在matlab中有代码:

x2(x2>=0)=1; 
x2(x2<0)=-1; 
%Find values in x2 which are less than 0 and replace them with -1, 
%where x2 is an array like

0,000266987932788242
0,000106735120804439
-0,000133516844874253
-0,000534018243439120

我尝试使用代码

在Python中执行此操作
if x2>=0:
   x2=1
if x2<0:
   x2=-1

返回 ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()

我该怎么做才能让所有积极的东西被 1 取代,而 -1 STORE 例如, x2 中的所有内容,而不仅仅是打印,以便我可以使用它后来做了其他一些事情。

2 个答案:

答案 0 :(得分:1)

你可以使用numpy的能力来索引布尔数组。

import numpy as np
x = np.array([-5.3, -0.4, 0.6, 5.4, 0.0])

not_neg = x >= 0 # creates a boolean array

x[not_neg] = 1 # index over boolean array
x[~not_neg] = -1

结果:

>>> x
array([-1., -1.,  1.,  1.,  1.])

答案 1 :(得分:0)

首先:

x2 = [0.000266987932788242, 0.000106735120804439, -0.000133516844874253, -0.000534018243439120]
print [1 if num >= 0 else num for num in x2]

<强>输出

[1, 1, -0.000133516844874253, -0.000534018243439120]

第二

x2 = [-1, 2, -3, 4]
print [-1 if num < 0 else num for num in x2]

<强>输出

[0.000266987932788242, 0.000106735120804439,  -1, -1]

如果您在一个声明中同时需要这两个

x2 = [0.000266987932788242, 0.000106735120804439, -0.000133516844874253, -0.000534018243439120]
x2 = [-1 if num < 0 else 1 for num in x2]
print x2

<强>输出

[1, 1, -1, -1]