从数字数组创建布尔数组

时间:2018-10-05 01:06:27

标签: python arrays

所以说我们有一些值:

data = np.random.standard_normal(size = 10)

我希望我的函数输出一个数组,该数组标识数据中的值是否为正,例如:

[1, 0, 1, 1, 0, 1, 1, 0, 0, 0]

我尝试过

def myfunc():
    for a in data > 0:
        if a:
            return 1
        else:
            return 0

但是我只得到随机数组数据中第一个值的布尔值,我不知道如何循环此函数以输出数组。

谢谢

4 个答案:

答案 0 :(得分:1)

使用numpy非常简单:

posvals = data > 0
>> [True, False, True, True, False, True, True, False, False, False]

如果您明确想要1和0:

posvals.astype(int)
>> [1, 0, 1, 1, 0, 1, 1, 0, 0, 0]

答案 1 :(得分:1)

您可以做np.where,是您的朋友

np.where(data>0,1,0)

演示:

print(np.where(data>0,1,0))

输出:

[1 0 1 1 0 1 1 0 0 0]

执行np.where(data>0,1,0).tolist()以获取带有常规逗号的列表,输出为:

[1, 0, 1, 1, 0, 1, 1, 0, 0, 0]

答案 2 :(得分:1)

您可以将三元运算符与列表理解一起使用。

data = [10, 15, 58, 97, -50, -1, 1, -33]

output = [ 1 if number >= 0 else 0 for number in data ]

print(output)

这将输出:

[1, 1, 1, 1, 0, 0, 1, 0]

正在发生的事情是分配了“ 1”或“ 0”,逻辑是数字大于(或等于)0。

如果您希望以函数形式使用它,那么就这么简单:

def pos_or_neg(my_list):
    return [ 1 if number >= 0 else 0 for number in data ]

答案 3 :(得分:0)

您正在尝试组合if和for语句。

看到您要使用相同条件操纵数组中的每个元素,然后返回更新的数组,那么您想要的就是map函数:

 def my_func(data):
   def map_func(num):
     return num > 0

   return map(map_func, data)

map函数将map_func()应用于数据数组中的每个数字,并将数组中的当前值替换为map_func()的输出

如果您明确想要10,则map_func()将是:

def map_func(num):
  if num > 0:
    return 1
  return 0