如何以最快的方式将数组列表中的每个0转换为1?

2024-04-26 05:14:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把大数组列表中的每一个0都转换成-1。这必须尽快完成。for循环对我来说非常慢。我的阵法是numpy阵法。你知道这个简单问题的更快的解决方法吗?你知道吗

下面是一个示例代码:

test_array=[1 0 0 1 0 0 1 1 0 1 1 0 1 0 0 0]

for index, value in enumerate(test_array):
if value == 0:
    l[index] = -1

test_array=[1 -1 -1 1 -1 -1 1 1 -1 1 1 -1 1 -1 -1 -1]

我的实际列表比本例中的列表长得多,因此快速解决方案是性能因素。你知道吗


Tags: 方法代码intestnumpy示例列表for
3条回答
In [1]: a = np.random.randint(0,2,1000000)  

In [2]: a                                                                      
Out [2]: array([0, 1, 1, ..., 1, 1, 0])

In [3]: %timeit a[a==0]=-1                                                     
1.73 ms ± 50.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

如果测试数组是实际列表

test_array = [1,0 ,0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0]
test_array_New = []
for i in test_array:
     if i != 0:
             test_array_New.append(i)
     else:
             test_array_New.append(-1)
test_array_New

输出:

[1, -1, -1, 1, -1, -1, 1, 1, -1, 1, 1, -1, 1, -1, -1, -1]

尝试:

import numpy as np
array1 = np.array([1,0 ,0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0])
print (np.where(array1 == 0, -1, array1))

输出:

[ 1 -1 -1  1 -1 -1  1  1 -1  1  1 -1  1 -1 -1 -1]

相关问题 更多 >