所以说我们有一些值:
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
但是我只得到随机数组数据中第一个值的布尔值,我不知道如何循环此函数以输出数组。
谢谢
答案 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()
的输出
如果您明确想要1
和0
,则map_func()
将是:
def map_func(num):
if num > 0:
return 1
return 0