我想检查一个NumPyArray的值是否在一个集合中,如果是这样,将该区域设置为一个数组= 1。如果没有设置keepRaster = 2检查一个集合中的值是否在python的numpy数组中
numpyArray = #some imported array
repeatSet= ([3, 5, 6, 8])
confusedRaster = numpyArray[numpy.where(numpyArray in repeatSet)]= 1
产量:
<type 'exceptions.TypeError'>: unhashable type: 'numpy.ndarray'
有没有办法通过它循环?
for numpyArray
if numpyArray in repeatSet
confusedRaster = 1
else
keepRaster = 2
为了澄清,并要求远一点的帮助:
我所想要知道的,和我目前做的,是把一个光栅输入到一个数组。我需要读取二维数组中的值,并根据这些值创建另一个数组。如果数组值在一个集合中,那么该值将为1.如果它不在集合中,则该值将从另一个输入派生,但现在我要说77。这是我目前使用的。我的测试输入有大约1500行和3500列。它总是在冻结行左右350
for rowd in range(0, width):
for cold in range (0, height):
if numpyarray.item(rowd,cold) in repeatSet:
confusedArray[rowd][cold] = 1
else:
if numpyarray.item(rowd,cold) == 0:
confusedArray[rowd][cold] = 0
else:
confusedArray[rowd][cold] = 2
嗯,所以我明白。如果测试值位于状态列表中而不是True,那么它将等于1,否则它将等于它的值。 有没有办法使输出 数组([1,0,1,0,0]) – mkmitchell
@mkmitchell,是的,你明白了。这与使用普通Python列表进行切片分配有点类似,但a)使用numpy更复杂的索引系统,并且b)遵循numpy约定,即将标量分配给数组的切片,将切片中的所有值分配给该标量值。 – senderle
如果它是一个二维阵列呢? – mkmitchell