我正在处理一个包含大约300 000个值的大型数组。它有10万行3列。我正在使用此数组进行迭代,如果第一列中的任何值超过了10的限制,我希望替换该数字。有没有比运行这样的东西更有效的方式?:
for i in range(N):
if array[i][0]>10:
array[i][0] = 0
我需要为其他两列重复这个序列,其中包括我的所有其他迭代使我的代码相当慢。
答案 0 :(得分:2)
将数组转换为numpy数组(numpy.asarray
),然后替换将使用以下值的值:
import numpy as np
N = np.asarray(N)
N[N > 10] = 0
答案 1 :(得分:1)
我假设您可能不希望为每列使用相同的阈值/替换值。在这种情况下,您可以将三个项目打包在元组列表中并迭代它。
import numpy as np
arr = np.ndarray(your_array)
#Edited with your values, and a more than symbol
threshold = 10
column_id = 0
replace_value = 0
arr[arr[:, column_id] > threshold, column_id] = replace_value
根据需要设置threshold
,column_id
和replace_value
。
答案 2 :(得分:0)
如果我理解你正确的话,你会找到类似的东西:
>>> from numpy import array
>>> a = array([[1,2,3],[4,5,6],[7,8,9]])
>>> a
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> a[a>5]=10 # <--- here the "magic" happens
>>> a
array([[ 1, 2, 3],
[ 4, 5, 10],
[10, 10, 10]])