我有一个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是每列的最小值。我假设顺序是一样的。不好的假设,但目前可以使用。
将感谢您为它做得更好的任何帮助
答案 0 :(得分:1)
我认为您只需要
result = largearray.copy()
result[result < min_values] = np.nan
也就是说,result
是largearray
的副本,但是小于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']