有效地将每一列比较为不同的值

时间:2019-04-24 10:45:19

标签: python arrays numpy

我有一个4000 * 6的numpy数组(6列)。我有一个最小值的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是每列的最小值。我假设顺序是一样的。不好的假设,但目前可以使用。

将感谢您为它做得更好的任何帮助

2 个答案:

答案 0 :(得分:1)

我认为您只需要

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

答案 1 :(得分:0)

我不使用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']