我正在尝试制作一种灵活的算法,如果它们太高,它将从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来减少索引的值?
答案 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]])
>>>