使用带有ndarray的if语句

时间:2015-11-03 22:23:34

标签: if-statement numpy where

我试图在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 ......

2 个答案:

答案 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]