按大小更改索引值

时间:2016-09-04 01:04:28

标签: python python-2.7 numpy multidimensional-array

我正在尝试制作一种灵活的算法,如果它们太高,它将从50 x 50阵列(包含来自拟合图像的像素值)中取值。 它们太高了(在python中)。我试图做的第一件事是:

#define EM(a) asm("db " #a);

#define X64_Start_with_CS(_cs) \
{ \
    EM(0x6A) EM(_cs)                     /*  push   _cs                   */ \
    EM(0xE8) EM(0) EM(0) EM(0) EM(0)     /*  call   $+5                   */ \
    EM(0x83) EM(4) EM(0x24) EM(5)        /*  add    dword [esp], 5        */ \
    EM(0xCB)                             /*  retf                         */ \
}

#define X64_End_with_CS(_cs) \
{ \
    EM(0xE8) EM(0) EM(0) EM(0) EM(0)     /*  call   $+5                   */ \
    EM(0xC7) EM(0x44) EM(0x24) EM(4)     /*                               */ \
    EM(_cs) EM(0) EM(0) EM(0)            /*  mov    dword [rsp + 4], _cs  */ \
    EM(0x83) EM(4) EM(0x24) EM(0xD)      /*  add    dword [rsp], 0xD      */ \
    EM(0xCB)                             /*  retf                         */ \
}

#define X64_Start() X64_Start_with_CS(0x33)
#define X64_End() X64_End_with_CS(0x23)

#define __break() asm("int3")

int main(void)
{
  __break();
  X64_Start();
  EM(0x48) EM(0x8D) EM(0x05) EM(0xF9) EM(0xFF) EM(0xFF) EM(0xFF) // lea rax, [$] ; rip-relative
  X64_End();
  __break();
}

当然,那不起作用,我得到了

  

ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()

问题是,如果我这样做,我不知道如果我使用a.any(),如何告诉它要替换哪个值。到目前为止,我认为我需要的是:

file = pf.open('/Users/Vofun/desktop/file.fits')
data = np.array(file[0].data)
for pixellist in range (len(data)):
        if data[pixellist] > 50:
           data[pixellist] = 10:

然后是一行代码告诉它用10代替值,但我不知道如何告诉它为它找到的像素做那个,因为我在编码方面很糟糕。如何根据它们的值超过50来减少索引的值?

1 个答案:

答案 0 :(得分:1)

您可以使用boolean indexing更改数据。

import numpy as np
a = np.random.random_integers(40, 60, (5,5))

>>> a
array([[58, 58, 43, 56, 54],
       [59, 40, 42, 52, 45],
       [50, 60, 43, 48, 52],
       [55, 48, 57, 41, 47],
       [57, 55, 43, 54, 42]])
>>>
>>> a > 50
array([[ True,  True, False,  True,  True],
       [ True, False, False,  True, False],
       [False,  True, False, False,  True],
       [ True, False,  True, False, False],
       [ True,  True, False,  True, False]], dtype=bool)
>>>
>>> a[a > 50] = 0
>>> a
array([[42,  0,  0,  0, 48],
       [ 0, 46,  0,  0, 49],
       [50,  0,  0, 44, 43],
       [46, 46,  0, 43, 49],
       [ 0,  0,  0,  0, 48]])
>>>