有效地将每列与不同的值进行比较

2024-05-15 01:16:45 发布

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

我有一个4000*6(6列)的numpy数组。我有一个最小值的numpy列(1*6)(由另一个3000*6的numpy数组组成)。 我想找到大数组中低于这些值的所有内容。但是每一个值都指向它对应的列。你知道吗

我尝试了一种简单的方法,基于我已有的单列解决方案:

largearray=[float('nan') if x<min_values else x for x in largearray]

但遗憾的是,它没有起作用:(。你知道吗

我可以为每一列和每一个值做一个for循环,但是我想知道是否有一个更快更优雅的解决方案。你知道吗

谢谢

编辑:我将尝试重新措辞:我有6个值和6列。 我想找出每列中低于6个值中相应值的值。 我所说的数组是指二维数组。抱歉,如果不清楚的话

对不起,我还在用Matlab思考。你知道吗

这是我的循环解决方案。是df,不是numpy。不过,有没有更快的办法?你知道吗

a=0
for y in dfnames:
    df[y]=[float('nan') if x<minvalues[a] else x for x in df[y]]
    a=a+1

df是大数组或数据帧 dfnames是我感兴趣的列名。 minvalues是每列的最小值。我假设顺序是一样的。错误的假设,但目前有效。你知道吗

会很感激你的帮助


Tags: innumpy内容dfforif数组nan
2条回答

我不使用numpy,所以它可能不是常用的解决方案,但是这样的工作:

largearray = numpy.array([[1,2,3], [3,4,5]])
minvalues =numpy.array([3,4,5])
largearray1=[(float('nan') if not numpy.all(numpy.less(x, min_values)) else x) for x in largearray]

结果应为:[[1,2,3],'nan']

我想你只需要

result = largearray.copy()
result[result < min_values] = np.nan

也就是说,resultlargearray的副本,但是小于min_values对应列的ay元素被设置为nan。你知道吗

如果仅当行中的所有条目都小于min_values的相应列时,才要将整行留空,则需要:

result = largearray.copy()
result[np.all(result < min_values, axis=1)] = np.nan

相关问题 更多 >

    热门问题