Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何删除数据数组中的两个最低值?_Python_Numpy - Fatal编程技术网

Python 如何删除数据数组中的两个最低值?

Python 如何删除数据数组中的两个最低值?,python,numpy,Python,Numpy,我从阵列开始: np.random.seed(959) superArray = np.random.randint(101, size=(5,3)) 删除2个最小值后,我需要计算超级阵列的中值 我似乎找不到任何方法来删除使用Ndarray的值。下面的代码就是我所想的 np.median(superArray.delete(superArray,[min(superArray),min(superArray)])) 当然,这对我来说是个错误,因为delete不是ndarray类型的方法,但这

我从阵列开始:

np.random.seed(959)
superArray = np.random.randint(101, size=(5,3))
删除2个最小值后,我需要计算
超级阵列的中值

我似乎找不到任何方法来删除使用Ndarray的值。下面的代码就是我所想的

np.median(superArray.delete(superArray,[min(superArray),min(superArray)]))

当然,这对我来说是个错误,因为
delete
不是ndarray类型的方法,但这正是我想要的。

您不必删除或删除任何内容。您可以只处理不包含不需要的元素的数组视图。最简单的方法是切片。所以你可以把它们按顺序排列,比如跳过前两个

np.median(np.sort(superArray.ravel())[2:])

您需要使用
ravel()
来展平阵列。

您不必删除或删除任何内容。您可以只处理不包含不需要的元素的数组视图。最简单的方法是切片。所以你可以把它们按顺序排列,比如跳过前两个

np.median(np.sort(superArray.ravel())[2:])

您需要
ravel()
来展平数组。

您可以
np.partition
ravel
<代码>np。在大型数组中,分区将比整体排序快

np.random.seed(959)
superArray=np.random.randint(101,大小=(5,3))
np.partition(superArray.ravel(),2)[2:]

您可以
np.partition
ravel
<代码>np。在大型数组中,分区将比整体排序快

np.random.seed(959)
superArray=np.random.randint(101,大小=(5,3))
np.partition(superArray.ravel(),2)[2:]

您可以使用
np.quantile
而不是更改
超级数组
np.中位数(x)
np.分位数(x,1/2)
相同。如果不考虑两个最小的元素,则将中点上移1,即可以使用
np.分位数(superArray,1/2+1/(superArray.size-1)

np.quantile
np.median
都有点慢,使用
np.partition
可以获得更好的性能:

# do-it-yourself quantile
idx = np.arange((superArray.size+1)//2,(superArray.size+2)//2+1)    
np.partition(superArray,idx,axis=None)[idx].mean() == ref
#True
时间:

def f():
    idx = np.arange((superArray.size+1)//2,(superArray.size+2)//2+1)
    return np.partition(superArray,idx,axis=None)[idx].mean()

def g():
    return np.quantile(superArray,1/2+1/(superArray.size-1))

def h():
    return np.median(np.partition(superArray.ravel(),2)[2:])

def i():
    return np.median(np.sort(superArray.ravel())[2:])

for tag,fn in [('partition',f),('quantile',g),('median+part',h),('median+sort',i)]:
    print(f'{tag:20s} {timeit(fn,number=100000)*10:.4f} us')

# partition            14.5955 us
# quantile             96.5980 us
# median+part          30.1133 us
# median+sort          29.4419 us
对于更大的(1000x1000)
超级阵列相同:

partition            12.2952 ms
quantile             12.7227 ms
median+part          20.8914 ms
median+sort          87.3877 ms

你可以使用
np.分位数
np.中位数(x)
np.分位数(x,1/2)
相同,而不是改变
superArray
。如果你不考虑两个最小的元素,你就把中点向上移动了1,也就是说,你可以使用
np.分位数(superArray,1/2+1/(superArray.size-1)

np.quantile
np.median
都有点慢,使用
np.partition
可以获得更好的性能:

# do-it-yourself quantile
idx = np.arange((superArray.size+1)//2,(superArray.size+2)//2+1)    
np.partition(superArray,idx,axis=None)[idx].mean() == ref
#True
时间:

def f():
    idx = np.arange((superArray.size+1)//2,(superArray.size+2)//2+1)
    return np.partition(superArray,idx,axis=None)[idx].mean()

def g():
    return np.quantile(superArray,1/2+1/(superArray.size-1))

def h():
    return np.median(np.partition(superArray.ravel(),2)[2:])

def i():
    return np.median(np.sort(superArray.ravel())[2:])

for tag,fn in [('partition',f),('quantile',g),('median+part',h),('median+sort',i)]:
    print(f'{tag:20s} {timeit(fn,number=100000)*10:.4f} us')

# partition            14.5955 us
# quantile             96.5980 us
# median+part          30.1133 us
# median+sort          29.4419 us
对于更大的(1000x1000)
超级阵列相同:

partition            12.2952 ms
quantile             12.7227 ms
median+part          20.8914 ms
median+sort          87.3877 ms

请使用2d数组定义
remove
,删除2个值是不可能的。请给出一个具体的例子,例如,即使与
np.arange(15)一样简单。重塑(5,3)
请使用2d数组定义
remove
,删除2个值是不可能的。请给出一个具体的例子,例如,即使与
np.arange(15)一样简单。重塑(5,3)
Smart。我从来没有用过那个函数。我想你只需要对那个结果应用
median
,你就完成了。Smart。我从来没有用过那个函数。我想你只需要对那个结果应用
median
,你就完成了。我希望这个被接受,我从来没有想过这个!我希望这个被接受,我从来没有想过我早就想到了!