我有一个浮点数(a
)和一个0或1(b
列表)的ndarray。 a
和b
具有相同的长度,通常为1000.我想将一个简单函数(例如减去反函数)应用于a
的元素,其索引对应于{1 {1}}。
以下方法需要少于1毫秒。是否可以加快速度?
b
答案 0 :(得分:4)
使用a
作为掩码,并相应地设置m = np.array(b).astype(bool)
a[m] = -1 / a[m]
个单元格:
b
更好的是,使用np.random.choice
初始化b = np.random.choice(2, 1000).astype(bool)
:
b
现在,您不需要将a
转换为数组的开销,只需直接使用它来索引a[b] = -1 / a[b]
:
22.3 µs ± 501 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
这在
中运行def mask(string, start=0, end=0, chunk=4, char="*"):
if isinstance(string, str):
string_len = len(string)
if string_len < 3:
return "input len = {}, what's the point?".format(string_len)
if start <= 0 or end <= 0:
start = string_len // chunk
end = start
if string_len <= 4:
mask_len = string_len // 2
start = 1 if mask_len - 1 == 0 else mask_len - 1
end = start
else:
mask_len = string_len - abs(start) - abs(end)
return string[:abs(start)] + (char * mask_len) + string[-end:]
if __name__ == "__main__":
s = "abcdefghijklmnopqrstuvwxyz01234567890a0b0c0d0e0f1a1b1c1d1e1f2a2b"
l = [i for i in s]
message = "ip: {}\nop: {}\n"
section = "-"*79
print("\nSTRINGS")
print(section)
print(message.format(s[:4], mask(s[:4])))
print(message.format(s[:3], mask(s[:3])))
print(message.format(s[:2], mask(s[:2])))
print(message.format(s, mask(s)))
print(message.format(s, mask(s,start=2,end=4,char="#")))
print(message.format(s, mask(s,start=3,end=3,char="x")))