我试图在569x462 ndarray中从文本文件中读取200以下的值。我想使用numpy.where来查找值...我已经尝试了以下代码:
import numpy as np
#Load in text file from Sebago
sebago=np.loadtxt('sebagoWatershedElv.txt',skiprows=6)
#Find where elevation is less than 200
lowElv=np.where(sebago[:]<200)
但输出显示的值小于200,有些值大于200 ......
答案 0 :(得分:2)
小一点,不要复制(或查看)你的阵列[:]
,除非你在1:1之外做一些事情。
import numpy as np
a = np.random.randint(10, size=(8, 8))
# array([[2, 6, 5, 1, 1, 8, 0, 3],
# [4, 7, 5, 4, 9, 6, 1, 8],
# [8, 3, 3, 4, 2, 3, 3, 0],
# [7, 3, 6, 3, 0, 0, 8, 6],
# [5, 7, 7, 0, 7, 4, 8, 6],
# [5, 9, 4, 8, 3, 2, 2, 4],
# [3, 4, 6, 6, 5, 2, 1, 0],
# [3, 7, 6, 4, 4, 4, 1, 3]])
如果将布尔数组(例如a <= 1
)输入np.where
,它将返回一个数组列表,其长度等于维数(此处为2)。将其传递给array
并将坐标对转换为列(例如(0,3),(0,4),您可以在上面的随机数据中看到它们为0或1)。转置它很方便.T
。
np.array(np.where(a <= 1))
# array([[0, 0, 0, 1, 2, 3, 3, 4, 6, 6, 7],
# [3, 4, 6, 6, 7, 4, 5, 3, 6, 7, 6]], dtype=int64)
使用Boolean索引数组。它使它变平并返回值。
a[a <= 1]
# array([1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1])
np.count_nonzero(a <= 1)
# 11
答案 1 :(得分:2)
这为一维数组提供了小于200的所有值:
lowElv = sebago[sebago < 200]