0

我对编程很陌生。我在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,并将所有这些存储x2中,而不仅仅是打印,以便我以后可以使用它来做一些其他事情。

4

2 回答 2

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.])
于 2013-10-27T14:09:37.533 回答
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]
于 2013-10-27T13:54:59.573 回答