Python 对于数组的不同部分,用不同的值替换数组中的零
我有一个浮点数数组,其大小事先不知道。它和其他浮点数中有零值。 我想用一个特定的值来替换它的零,只用于数组的一部分,比如说数组的前三分之一,第二个三分之一用另一个值,最后三分之一用另一个值 我试图使用Python 对于数组的不同部分,用不同的值替换数组中的零,python,arrays,numpy,list-comprehension,Python,Arrays,Numpy,List Comprehension,我有一个浮点数数组,其大小事先不知道。它和其他浮点数中有零值。 我想用一个特定的值来替换它的零,只用于数组的一部分,比如说数组的前三分之一,第二个三分之一用另一个值,最后三分之一用另一个值 我试图使用my_数组[:my_数组.size//3:]=第一个值作为列表理解的一部分: my_array = np.asarray([first_value for x in my_array[:my_array.size//3:] if x == 0]) 但这将阵列减少到只有前三分之一。如何以上述方式替换
my_数组[:my_数组.size//3:]=第一个值
作为列表理解的一部分:
my_array = np.asarray([first_value for x in my_array[:my_array.size//3:] if x == 0])
但这将阵列减少到只有前三分之一。如何以上述方式替换零?您可以使用掩码首先获取所需的索引,然后立即为其分配任何值,而不需要循环:
mask = np.where(my_array==0)[0]
my_array[mask[mask<my_array.size//3]] = first_value
my_array[mask[np.logical_and(mask>=my_array.size//3, mask<2*my_array.size//3)]] = second_value
my_array[mask[mask>=2*my_array.size//3]] = third_value
让我们尝试使用数组长度的循环,该数组长度不能总是按部分的数量来划分
import numpy as np
number_of_parts=3
length_of_parts=int(np.ceil(my_array.size/number_of_parts))
Values=[1,2,3]
Parts=[[counter*length_of_parts,min((counter+1)*length_of_parts,my_array.size)]for counter in range(number_of_parts)]
for (start,end),Value in zip(Parts,Values):
my_array[start,end][my_array[start,end]==0]=Value
import numpy as np
number_of_parts=3
length_of_parts=int(np.ceil(my_array.size/number_of_parts))
Values=[1,2,3]
Parts=[[counter*length_of_parts,min((counter+1)*length_of_parts,my_array.size)]for counter in range(number_of_parts)]
for (start,end),Value in zip(Parts,Values):
my_array[start,end][my_array[start,end]==0]=Value