个体化精准神经成像:目前的方法和未来的方向

大多数脑功能的神经影像学研究都是在标准化空间中分析数据,以确定参与者的共同激活区域。这些研究将大脑组织的个体差异视为噪音,但这种方法可能会掩盖有关大脑功能结构的重要信息。最近,一些研究采用了针对个体的方法,旨在描述这些个体差异的特征,并探索其可靠性和对行为的影响。这些研究的一个子集采用了精确成像方法,从每个参与者那里收集多个小时的数据,以更精细的尺度绘制大脑功能。在这篇综述中,我们对特定于人的精确成像技术如何使用静息状态测量来检查大脑组织中的个体差异及其对行为的影响进行了广泛的概述,随后是基于任务的活动如何继续为这些发现添加细节。我们认为,在认知神经科学的许多领域,针对人的精确方法在揭示大脑功能组织及其与行为关系的新细节方面表现出了巨大的希望。我们还讨论了这个新领域目前的一些限制以及它可能采取的一些新方向。

1. 简介

大多数功能性磁共振成像(fMRI)研究都将个体大脑标准化为一个模板,目的是找到一组大脑活动的共同模式,并将其推广到特定人群。

然而,大脑的形状和功能组织在个体之间差异很大,标准化永远无法完全弥补这些差异。更糟糕的是,相同的功能区域可能不在不同参与者的同一解剖区域,因此即使解剖特征的完美对齐仍然可能导致跨功能异质性区域的平均。

部分是为了回应这些担忧,最近的工作探索了在分析fMRI数据时使用更具体的方法。这些研究不是将大脑组织的个体差异视为噪音,而是旨在识别个体中可靠的激活或连接模式,即使这些模式是独特的,与其他参与者的模式不同。这项工作提供了证据,证明神经组织的个体差异是可靠的,可能与行为的个体差异有关。如果是这样的话,更清晰地理解个体特异性成像结果和个体特异性行为之间的关系,可以阐明行为是如何在大脑中实现的,并对临床疾病的治疗和预防具有实际意义。

本文综述了近年来对个人特异性成像方法的探索,包括精确(也称为深度或密集采样)神经成像方法。最近有一些其他关于精确神经成像文献的综述集中在特定的个体上(例如,精确精神病学或认知控制)。

这篇综述的目的是作为一个广泛的概述,具体的人和精确的方法如何提高我们对大脑组织的理解更普遍。首先,我们讨论了与传统群体分析相关的问题,以及这种做法如何导致模糊,甚至误导的结果。接下来,我们回顾了使用个人特异性和精确成像方法的研究,首先通过使用静息状态测量检查工作,然后是结合基于任务的激活的研究。我们将针对个体的研究定义为那些明确检查个体主体水平上大脑活动差异的研究,而不是将受试者组合在一起并观察群体水平的激活或连接模式。例如,许多针对个体的研究使用了诸如基于连接体的预测建模(CPM)等方法来克服传统方法在泛化方面的局限性,并试图将大脑连接的个体差异与行为的个体差异联系起来。其他研究使用了精确的神经成像方法,其中每个人都被扫描了很长一段时间(通常超过两个小时),以便在个体主体水平上对大脑活动和组织进行更可靠的估计。

表1按数据集(可用时)列出了这些部分中回顾的研究,以提供已完成工作的快速参考。本综述的最后一部分讨论了当前个人特异性神经成像工作的局限性,并包括可能提供更深入了解大脑组织和行为的个体差异的潜在未来方向。

2. 传统成像方法的局限性

人脑的功能组织在人与人之间有许多共同之处。初级视觉皮层可以可靠地在枕叶中找到。初级运动皮层可以可靠地在中央前回中找到。初级听觉皮层可以可靠地在枕骨回附近找到。这样的例子不胜枚举。这种共性使得在群体分析中结合个体参与者的神经活动成为可能,以确定有望推广到样本抽取的人群的激活。

然而,每个人的大脑在大小和形状上都有所不同,因此大多数fMRI研究都进行了一系列步骤,使个体大脑彼此更加相似。其中的第一个步骤是标准化,它试图扭曲每个人的大脑,使不同人的相同解剖位置(例如,左舌回或右上回的后部)在标准化的空间中对齐。尽管这种方法对皮层下结构的效果相对较好,但由于皮层折叠模式的异质性皮层表面在不同受试者之间的对齐要困难得多。更糟糕的是,不同的人的许多功能区域在某种程度上处于不同的解剖位置,这意味着即使标准化可以在结构上完美地对齐一组大脑,它们仍然不能在功能上对齐

例如,Frost和Goebel(2012)试图使用一系列功能定位器来确定个体之间解剖和功能大脑区域的对应程度。尽管使用了基于曲率的皮层对齐,其中包含了个体折叠模式来改善解剖对齐,但他们发现许多功能区域,如语言区和梭状回面部区域,在个体之间的解剖位置差异很大。

同样,Malikovic等人(2007)发现个体大脑中V5/MT+区域的解剖位置存在显著差异。基于这些和类似的结果,Amunts和Zilles(2015)认为,有必要采用新的大脑测绘方法来将结构与功能联系起来。

最近的进展试图减轻与传统对齐方法相关的问题。例如,多模态表面匹配(MSM)方法允许输入特征的不同组合来改善对齐,超对齐对齐个体之间的神经活动模式。这些方法的共同之处在于,它们试图解决一个事实,即传统的群体平均分析可能会掩盖大脑拓扑结构中的个体差异传统的群体分析隐含地假设所有受试者在相同的解剖位置具有相同的功能区域,但这一假设经常被违背。当它出现时,在群体分析过程中,来自功能不同区域的神经信号将混合在一起,这可能导致结果可能无法反映群体中的任何人。这个想法已经通过遍历定理得到了证明,并且长期以来在许多科学领域得到了认可,包括心理学和神经科学。问题是大多数心理过程不是遍历的(即个体间和个体内的变异是“渐近等效”的过程),因此群体数据可能无法准确反映个人层面的心理过程。事实上,近70年前,西德曼(1952)就证明了群体平均曲线往往不能代表任何一条产生平均值的单独曲线。由于平均数据只会在特定条件下与个人数据相似,他确定平均数据不能用于在个人层面上进行推断。

同样的问题也适用于神经成像研究。例如,假设有一个大脑区域在每个个体中执行相同的功能,但在规范化后,该大脑区域的位置在任何两个参与者中都没有重叠。寻找与该功能相关的区域的组级分析可能会错过该区域,尽管它与感兴趣的功能相关。在这种情况下,将群体结果推广到群体中的每个个体,以及从中抽取样本的人口,是误导性的,是所谓生态谬误的一个例子。

3. 用静息态功能连接识别个体差异

3.1 连接体指纹和个体特性连接

针对个人的神经成像研究旨在了解大脑中的个体差异,而不是将这些差异视为噪音。其中许多研究使用了公开可用的数据集,如人类连接组项目(HCP),该研究旨在研究个体差异,特别是大脑功能连接方面的差异。虽然之前的个体差异研究试图将功能连通性与行为表现联系起来,但这些测量方法通常缺乏可靠性,不太可能被复制。Finn et al.(2015)引入了基于连接体的预测建模(CPM)方法,该方法试图通过使用全脑信息来识别具有内置交叉验证的预测网络,而不是简单地寻找相关性,从而克服泛化性的限制。他们检查了HCP样本中静息状态功能连接(RSFC)的个体差异,并证明可以根据其连接模式从群体中准确地识别出个体。基于RSFC或连接体指纹的个体识别被反复用于检查大脑连通性的个体差异。例如,Airan等人(2016)探索了几个有助于个体识别的指标,并发现连通性的个体差异在关联网络和额顶网络中最大,与其他研究结果一致。此外,尽管许多研究计算了单个稳定的功能连接组,但Liu等人(2018)发现RSFC的时变特征(称为时间连接组或动态功能连接)也可靠地识别出一个群体中的个体。此外,Chen和Hu(2018)使用了一种融合了时间和空间信息的循环神经网络,仅用72秒的数据就能准确识别个体,Byrge和Kennedy(2019)发现,准确识别个体不需要特定的连接集。这些结果表明,大脑许多不同区域的连通性包括个体特有的特征(尽管在群体平均水平中缺乏,但在个体中存在的特征;也被称为“性状变异”或“网络变异”)。

功能性连接的个体差异也被发现随着时间的推移是稳定的。例如,Miranda-Dominguez和同事(2018)发现,在两年的时间内,成人和儿童的连接体指纹识别都保持准确,这一发现后来得到了其他研究小组的证实。Hoorien等人(2019)随后使用四个纵向数据集来证明,先前被证明最能预测个体受试者的相同额顶和关联网络在多年后也能最好地区分个体连接模式

此外,有证据表明个体连接体可能部分由遗传决定。MirandaDominguez等人(2018)发现,指纹分析可以将兄弟姐妹与不相关的个体区分开来。Demeter等人(2020)进一步表明,功能连接体指纹可用于识别同卵双胞胎,并且随着遗传相似性的降低,识别精度也会降低。

除了个体连接体稳定可靠外,它们还与行为的多个方面有关,包括流体智力、人格,生活方式,认知灵活性和处理速度。它们也可能是理解大脑病理的有用工具。例如,Dosenbach et al.(2010)使用RSFC来预测大脑年龄,这是基于功能组织的大脑成熟度水平。此外,Ousdal等人(2020)发现,在中老年人中,2-3年内连接体稳定性的增加与记忆表现的下降之间存在关联。他们推测,稳定性的增加反映了大脑适应年龄变化的能力下降,这可能会影响整体认知功能,导致记忆缺陷。

此外,个体功能连接体可以预测自闭症谱系障碍和注意缺陷/多动障碍儿童的社会和行为症状评分,这表明功能连接可能用于为未来对这些障碍的研究提供信息。Brennan等人(2019)还证明,基于rsfc的生物标记物可用于预测基于治疗的改善以及各种强迫症行为的严重程度。此外,针对精神病的个人研究使用RSFC来预测症状严重程度和识别生物标志物比传统方法更好。这些研究都发现,网络之间功能连接的异常在预测症状评分方面很重要,这表明这些障碍可能与高阶网络之间功能失调的相互作用有关。简而言之,个人特异性成像揭示了精神疾病的细节,以及功能性连接体和行为之间的关系,这些都是以前在群体水平的研究中没有发现的。

3.2 精确成像和静息状态

最近的一些针对个人的研究采用了精确的神经成像方法,从每个参与者那里收集了大量的数据(至少两个小时,通常更长)。许多传统的fMRI研究从每个受试者收集的数据相对较少(有时只有5-10分钟),然后进行分组分析。然而,由于数据量如此之少,fMRI测量的测试-重测可靠性较低,并受到头部运动等变量的影响。精确神经成像研究通过重复采样收集高质量的个体测量数据来解决这些问题,从而产生了密集采样或深度采样等替代术语。其中一些最早的研究通过收集少数人多次回话的fMRI数据,为个人特异性神经成像提供了基础。

例如,Poldrack等人(2015)收集了迄今为止最大的单人类数据集之一,在532天的时间里进行了84次静止状态扫描(总计约14小时)。

Laumann等人(2015)随后将这些数据与群体数据进行了比较,发现个体大脑的功能组织包含了在群体中看不到的独特特征。作者认为,少量的数据可能无法准确地捕捉到这些个人特有的特征。Gordon等人(2017a)检查了三个静息状态数据集,并确定许多个体表现出个人特有的特征,并且这些特征是可靠的,即使它们是独特的。此外,在午夜重复扫描10个人后(午夜扫描俱乐部数据集;MSC)进行了近两个月的研究,并从每个参与者那里获得了15个小时的数据,Gordon等人(2017c)确定,他们的一些参与者表现出了群体平均值中不存在的个人特定特征,这支持了有意义的信息被群体平均值所掩盖的观点。

在这些发现的基础上,其他工作为连接体随时间的稳定性提供了进一步的证据。Badhwar等人(2020)在2.5年的时间里,在多个地点和扫描仪上扫描了一个人。虽然在不同部位和/或扫描仪之间进行比较会显著降低指纹识别的准确性,但在同一部位和扫描仪进行的扫描中,参与者的连接组是稳定的。

精确成像正变得越来越受欢迎,不仅可以进一步研究个体内部随时间的变化性(例如,Duchesne等人,2019年,他们对单个个体进行了超过15年的扫描),而且还可以扩展对个人特定特征的研究。这些研究发现,功能定义的区域可以以可预测的方式在大小上变化,并且在群体平均值中不存在的个人特定特征可以在参与者子集中保持一致。例如,Braga和Buckner(2017)对个体大脑网络的分析显示,默认网络可能是两个不同的网络,但观察这种区别所需的精细空间尺度无法通过群体水平的分析实现。他们还在其他传统的功能网络中发现了类似的结果,这表明群体水平的分析并不能捕捉到个体大脑组织的基本信息。Gordon等人(2020)随后在这些结果的基础上发现,默认模式网络被划分为九个具有不同功能的子网络,进一步证明了精确成像方法提供了比传统方法更细粒度的脑组织检查。

精确的神经成像也可以很容易地应用于精神病理学的研究。Poldrack et al. s(2015)对单个人脑的描述表明,活动的变化是如何随着时间的推移而被测量的,并与生理测量相联系,这可能会揭示与疾病相关的细节。最近,Gratton等人(2020)指出,精神障碍治疗往往不足的一个原因可能是疾病中患者症状学的高变异性。他们认为,精确的神经成像可能是表征疾病中的个体差异的一种方法,以便更有效地为个别患者量身定制治疗。与这一观点一致,证据表明,在神经影像学研究中通常收集的数据量不足以在个体水平上准确地描述精神病理学。

在一定程度上是为了回应这一担忧,Sylvester等人(2020)使用MSC数据集检查杏仁核和静息状态网络之间的连通性。他们在杏仁核中确定了三个独立的分支,它们表现出不同的连接模式,并认为精确的数据集将使研究人员能够更好地理解精神疾病背后的神经机制。类似地,Greene等人(2020)使用精确神经成像方法来表征与丘脑和基底神经节的连通性,发现一些皮层下区域可以作为更大网络的整合区。有些区域是所有参与者共享的,而其他区域则是因人而异的。作者认为,大脑组织的这些个体差异可能解释临床结果的差异,并作为潜在的治疗方法。与这一观点一致,Gordon等人(2018)将精确fMRI应用于创伤后应激障碍(PTSD)退伍军人的研究。他们发现,创伤性脑损伤会降低RSFC,而RSFC的降低与PTSD症状严重程度的增加有关,作者证明,如果没有大量的数据,这种影响不会很明显。Newbold等人(2020)对三名参与者的右臂进行了两周的铸造,并在六到九周内每天对他们进行扫描。在铸型期间,左初级运动皮层和其他躯体运动区域之间的RSFC显著降低,而与废臂相关的环路中开始出现自发脉冲。然而,在移除铸件后,RSFC迅速恢复到铸造前的水平,脉冲开始消失。这些发现表明,当面临足够的变化时,大脑的功能组织可以被行为改变,这可能会改变我们在疾病背景下理解大脑可塑性的方式。如果没有精确方法提供的细粒度细节,这些见解是不可能实现的。

4. 基于任务的活动提高个体定征

4.1 基于任务的活动和个体差异

已经讨论过的针对个人的研究集中在静息状态fMRI上,而不是基于任务的活动。使用静息状态的动机之一是不同大脑状态的功能组织是相似的,因此能够索引你是谁,而不是你在做什么。例如,通过使用64个不同的任务,Cole等人(2014)发现,功能性组织主要是由一种内在结构决定的,这种结构在休息之间或任务之间几乎没有变化。尽管作者确实发现任务之间的功能连通性发生了变化,但这些变化很小,Cole等人(2019)认为这种变化可能是由于混淆因素,如任务时间或头部运动。

RSFC还可以用于预测任务活动的模式。例如,Tobyne等人(2018)使用连接体指纹识别来预测外侧额叶皮层中与视觉和听觉工作记忆和注意力相关的激活,Osher等人(2019)进一步预测了来自RSFC的背侧注意网络激活。因此,很自然地会问,RSFC是否是捕获神经组织中的个体差异所需要的全部,特别是考虑到RSFC的获取相对简单。

然而,有理由怀疑仅靠静息态连通性可能不足以表征个体变异性的某些方面。首先,休息是一种不受约束的状态,因此人们在不受约束的时间内所做的事情的差异可能会带来噪音,并模糊可靠的个人特定的活动模式。当参与者感到无聊时,他们可能会走神,或者四处走动,甚至睡着了。这些问题在临床人群、老年人和儿童中更为明显。为了缓解这些问题,一些研究试图比较休息时的激活和自然观看条件下的激活(例如,观看电影片段),希望约束参与者的大脑状态。在一项这样的研究中,Vanderwal等人(2017)发现,与单独休息相比,看电影可以提高指纹识别的准确性

第二个问题是,静息态连接本身可能会错过神经组织的重要方面。使用任务来改变大脑状态也可能提供对大脑功能组织的进一步了解,甚至在检查静息状态连接时也是如此。芬恩和康斯特布尔(2017)使用心脏压力测试的类比,目的是找出可能是异常的差异,但在休息时观察到的差异太小。类似地,使用认知任务来暴露感兴趣的过程可能会放大休息时看不见的个体差异

4.2 精确技术中基于任务的激活

许多研究也将基于任务的活动纳入了精确的神经成像框架,并收集了大量的数据。在某些情况下,添加任务数据并不会显著影响结果。例如,Gratton et al.(2018)发现,功能性组织主要是由个人、特质类品质决定的,而不是由任务状态决定的。此外,Braga等人(2020)反复扫描了一小群人,以表征每个人的语言网络,并发现他们的连接定义的语言网络几乎没有根据用于创建它的状态而变化。另一方面,他们还发现这个网络是几个具有专门功能的不同关联网络之一,他们还确定了一些在以前的工作中没有发现的功能区域。Marek等人(2018)使用MSC数据集,发现小脑功能结构中一致的个体差异,与静息状态数据衍生的分区相对应,其他多人发现rs-fMRI可以再现与基于任务的功能定位器产生的类似的个人特定区域和网络

个体大脑图表项目已经证明,增加认知任务的数量可以改善特定大脑区域及其功能的描述。同样,自然场景数据集扫描了观看数千种不同场景图像的个人。这种方法是基于这样一种想法,即详细研究少数个体大脑的功能结构将为更广泛地研究神经组织提供新的见解。要做到这一点,需要在尽可能多的环境中研究个体大脑。

5. 局限和未来的方向

虽然针对个人的成像技术已经为大脑中的个体差异提供了重要的见解,但该领域仍处于起步阶段。在这里,我们概述了一些目前的局限性以及未来研究的潜在方向。

5.1 用大任务组密集成像认知

大部分关于个体可变性的研究都使用了静息状态数据,但最近的证据表明,添加任务状态可能会有所帮助。例如,Finn等人(2017)认为,由于静息状态噪音更大,任务状态可能需要比静息更少的扫描时间来产生可靠的受试者内部测量。然而,很少有研究直接验证了这一假设,多回波fMRI可能提供了另一种解决方案(见章节5.5)。此外,一项任务可能不是最优的;包含多个任务状态可用于改善行为预测,因为任何单独的任务都可能错过使用其他任务可以观察到的功能架构的重要方面。给定有限的时间,收集更多任务与收集单个任务的多次运行之间需要权衡。然而,在尽可能广泛的不同背景下测量同一参与者的大脑活动,将提供认知神经组织的更完整的图景。例如,在不同背景下研究大脑已经导致了许多专门的大脑区域的发现,如梭状面区,海马旁区域,和语言区。精确成像提供了一个独特的机会,通过纳入任务状态,在更精细的尺度上研究大脑功能。个体大脑图表(IBC)项目就是这样一种尝试,通过收集12个人完成大约30个任务时的数据来映射广泛的感知和认知功能,而自然场景数据集则收集了个人观看数千张图像时的数据。像这样的方法可能有助于我们在个人层面上进一步了解大脑的功能结构。

5.2 假设共享拓扑结构的局限性

我们回顾了许多使用个人特异性成像方法的研究,但其中许多研究仍然使用群体衍生的分块来绘制大脑并建立其功能模型。特别是,许多功能连通性研究在参与者之间采用单一、共享的分组。例如,Finn等人(2015)对45个参与者使用分组聚类算法来创建一个分组,然后将其应用于分析中的所有受试者。这种方法隐含地假设分区在个体之间既不变化,也不基于任务在个体内部变化,这可能是不现实的。事实上,之前回顾的精确成像文献已经广泛证明,基于群体的分组并不能准确地代表群体中每个人的功能组织。如Salehi等人(2020)所建议的,未来的研究可以使用基于功能的分块方法,或者创建新的分块来解释神经结构的个体差异。

5.3 个体水平成像泛化

针对个人的精确神经成像的一个潜在问题是泛化性。上面讨论的研究反复发现,个体的大脑是异质的,那么这些结果如何能推广到不在研究中的个体呢?重要的是,这些研究中的许多已经发现了大脑神经结构的特征,这些特征即使不是所有的大脑,也是许多大脑共享的。

例如,Braga和Buckner(2017)和Gordon等人(2020)发现,默认网络可能由传统方法看不见的多个网络组成,但它们仍然存在于几乎每个大脑中。精确的神经成像技术能够清晰地观察大脑,这在以前是不可能的,而且很可能会继续揭示尚未被发现的神经组织细节。然而,这里回顾的个人特异性和精确成像研究主要使用一小部分数据集,如人类连接组项目(HCP)或Midnight Scan Club数据集(表1)。

5.4 可靠性悖论

精确成像研究的关键优势之一是在每个参与者身上收集大量数据,增加了受试者内部的可靠性。这些高质量的测量使研究人员能够确信,在特定个体中观察到的个人特定特征是真实的,而不是由于噪声。也就是说,尽管受试者内部的可靠性是必要的,但如果我们的最终目标是将大脑组织的个体差异与行为的个体差异联系起来,这是不够的。

为了达到这个目标,受试者之间的个体差异也必须是可靠的

5.5 将脑刺激技术应用于个人特定成像

经颅磁刺激(TMS)是一种非侵入性脑刺激,非常适合于研究个体差异,因为它可以通过实验控制人体特定功能区域的活动。大多数神经成像研究本质上是相关的,因此将TMS添加到个人特异性成像研究中,将允许对个人特异性功能区域的大脑活动进行因果操纵。幸运的是,大脑刺激也在朝着针对个人的方法发展。刺激点以前通常是根据解剖位置或国际10/20电极头皮位置选择的,但由于大脑的功能组织因人而异,这些标准化目标在不同的人身上产生不同的效果。相反,使用功能性连接来定位与感兴趣区域高度连接的刺激位点已被证明是可复制的,并有望改善基于TMS的一系列疾病治疗。

5.6 新分析技术

大量的工作已经完成使用连接体指纹识别个体和预测激活模式和个体特征。这项工作可以揭示健康人群和临床人群在认知方面的差异,并确定那些有发展未来疾病风险的人。目前关于预测个体差异的大部分文献都使用了一种称为基于连接体的预测建模(CPM)的方法,该方法通过交叉验证派生出预测大脑行为关系的模型。然而,其他连接体指纹技术也已成功用于通过其结构来识别个体和功能连接。新的方法也已经出现,比如最近的多维CPM方法,它结合了来自多个不同状态的连接体,而不是使用一种状态来预测其他状态。

6. 结论

针对个人的精确神经成像技术将使研究人员能够比以往任何时候都更准确地了解大脑的功能结构。虽然这一领域仍处于早期阶段,但近年来研究已经取得了实质性进展。这项研究为与群体分析相关的众所周知的问题提供了解决方案,并可能导致对人类大脑功能组织的新见解。他们还提供了有意义的证据,证明精确成像方法可以揭示大脑的精细细节,而这些细节只有在从每个人身上收集大量数据时才能看到。

这些针对个人的方法在揭示大脑的功能组织及其与行为的关系方面显示出巨大的希望。

注:综述文献列表见原文。

参考文献:Person-specific and precision neuroimaging: Current methods and future directions

本文转载于网络 如有侵权请联系删除

相关文章

  • Oracle之存储过程和MERGE INTO语句

    一、MERGEINTO语句  1、mergeinto语句的功能:我们操作数据库的时候,有时候会遇到insert或者Update这种需求。我们操纵代码时至少需要写一个插入语句和更新语句并且还得单独写方法效验数据是否存在,这种操作完全可以用mergeinto语句代替,不仅省时省力而且条理更清晰,一个SQL语句直接完成插入,如果有相同主键进行更新操作。使用场景:判断B表和A表是否满足ON中条件,如果满足则用B表去更新A表,如果不满足,则将B表数据插入A表或者更多的操作。  2、具体SQL:下边sql是我在工作中最常使用的,功能是对接口表(表B)中通过批次ID查到的合同进行对正式表(表A)插入和更新。除此之外,还可以根据你的想实现功能进行各种条件更新和插入。只update或者只insert,带条件的update或带条件的insert,全插入insert实现,带delete的update(觉得可以用3来实现)MERGEINTO后是更新的表,USING是对接口表进行筛选,(如果有重复数据,仅选取一行插入,用ORDERBY控制)。ON中是具体的条件(表中标识字段,字段编码)满足执行WHENMATCH

  • 可组合的 Vue——来自Vue.js 核心团队成员,VueUse 作者的分享

    来源:前端圈 2021年5月来自全球各地的Vue.js开发者齐聚线上,一起见证了VueConf2021杭州的成功举办。 在大会上,Vue.js核心团队成员,VueUse作者,全职开源工程师AnthonyFu通过远程接入的方式给大家带来了《可组合的Vue》主题演讲。分享的内容主要包括VueCompositionAPI底层原理介绍,对于编写优质的组合式函数技巧与模式。以下是他在VueConf2021分享的视频和PPT,欢迎大家观看。

  • MySQL高可用之PXC

    PXC简介 PXC(PerconaXtraDBCluster)是一个开源的MySQL高可用解决方案。他将PerconaServer和XtraBackup与Galera库集成,以实现同步多主复制。基于Galera的高可用方案主要有MariaDBGaleraCluster和PerconaXtraDBCluster,目前PXC架构在生产线上用的更多而且更成熟一些。PXC相比那些传统的基于主从模式的集群架构MHA和双主,GaleraCluster最突出的特点就是解决了诟病已久的复制延迟问题,基本上可以达到实时同步。而且节点与节点之间,它们互相的关系是对等的。本身GaleraCluster也是一种多主架构。PXC是在存储引擎层实现的同步复制,而非异步复制,所以其数据的一致性是相当高的。 要搭建PXC架构至少需要三个MySQL实例来组成一个集群,三个实例之间不是主从模式,而是各自为主,所以三者是对等关系,不分从属,这也叫multi-master架构。客户端读写时,链接哪个实例都是一样的,读取到的数据是相同的,写入任意一个实例后,集群会将自己新写入的数据同步到其他实例上,这样架构不共享任何数据,是

  • Unity AssetBundle的几个加载方式

    stringpath=@"AssetBundles/scene/cubewall.ab"; stringcacheDownloadPath=@"file://D:\UnityWorkSpace\FifthMonthWork_Groups\AssetBundle_Demo\AssetBundles\scene\cubewall.ab"; stringtempWebAddress=@"http://localhost/AssetBundles/scene/wall.ab";//第一种加载AB的方式,异步进行加载从二进制文件中IEnumeratorLoadAB() {   AssetBundleCreateRequestrequest=AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(path));   yieldreturnrequest;   AssetBundleab=request.assetBundle;   GameObjectwallPrefab=ab.LoadAsse

  • 几行代码实现小程序云开发提现功能

    先看效果: 纯云开发实现,下面说使用步骤: 一:开通商户的企业付款到领取功能 说明地址: https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1使用条件1、商户号(或同主体其他非服务商商户号)已入驻90日2、截止今日回推30天,商户号(或同主体其他非服务商商户号)连续不间断保持有交易使用条件是第一难,第二难在下面这里 在网上找了很多,感觉是云开发这里的一个不完善地方,如果不填ip,会报这种错 {"errorCode":1,"errorMessage":"usercodeexceptioncaught","stackTrace":"NO_AUTH"}复制<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[此IP地址不允许调用接口,如有需要请登录微

  • 科学瞎想系列之七十七 齿槽转矩是个神马鬼

    【图片部分来自网络如有侵权敬请邮箱联系。欢迎原文转发到朋友圈,未经许可的媒体平台谢绝转载,如需转载或合作请邮件联系。联系邮箱laolicsiem@126.com】搞永磁电机的宝宝们大概都体验过永磁电机的一种特有现象,就是当一台永磁电机装配完成后,用手盘车,会有“咯噔咯噔”的咔顿感觉,这就是齿槽转矩在作祟。1齿槽转矩的定义及产生原因齿槽转矩是永磁电机特有的一个概念,GB/T2900.25-2008《电工术语旋转电机》里有明确的定义,即:411-48-45齿槽转矩(coggingtorque)——无供电的永磁电动机由于其转子和定子有自行调整至磁阻最小位置的趋势而产生的周期性转矩。从本质上讲,齿槽转矩是永磁体磁场与齿槽间作用力的切向分量。齿槽转矩总是试图将转子定位在某一位置,因此齿槽转矩又称定位转矩。齿槽转矩与电枢电流无关,是定转子相对位置的函数,与极槽配合及齿槽和磁极的结构尺寸等有很大关系。说这些可能宝宝们不大好理解,老师通俗地给宝宝们解释一下。老师曾在瞎想第六十七期《核武器是个神马鬼》中说到,任何系统都希望趋于一种低能态,即系统含有的能量越低,系统越稳定,这就是俗话说的“能坐着不站着,能

  • 百度上线深度学习工具Visual DL,提供独立的Python SDK

    百度PaddlePaddle&ECharts团队宣布上线深度学习可视化工具VisualDL,该工具可以使得深度学习任务变得生动形象,实现可视分析。百度希望能够借此为全球更广泛的用户提供更便捷高效的深度学习工具。目前,大部分深度学习框架都提供了Python的用户界面,其训练过程的状态通常以日记的形式被记录下来,这种方式可以观察短期内的训练状态,但是难以从全局把握训练过程中的变化趋势,导致提取信息时受到较多限制。反观VisualDL,它改变了传统的日记式记录形态,便于用户将训练过程可视化,帮助更好地把控全局。在具体使用上,VisualDL深度学习可视化工具功能全面。首先,它的“Scalar”功能支持Scalar打点数据展示,可将训练信息以折线图的形式展现出来,方便观察整体趋势,还能在同一个可视化视图中呈现多条折线,方便用户对比分析。其次,VisualDL的“Image”功能支持图片展示,用户可轻松查看数据样本的质量,也可以方便地查看训练的中间结果,例如卷积层的输出或者GAN生成的图片。同时,VisualDL还具有Histogram参数分布展示功能,方便用户查看参数矩阵中数值的分布曲

  • MFC程序中使用调试宏ASSERT()、ASSERT_VALID()、VERIFY()和TRACE()的区别

      其实这篇文章说的很明白了:http://dev.gameres.com/Program/Other/DebugMacro.htm   结论如下:   1、ASSERT()测试它的参数,若参数为0,则中断执行并打印一段说明消息;非0什么事儿都不做。在Release版本的程序中它不起任何作用。   2、VERIFY()和ASSERT()很相似,区别在于在Release版本中它仍然有效,但只计算参数值,不输出诊断信息。   ASSERT()使用的时候必须保证参数表达式中不能有函数调用(译者注:ASSERT()宏在Release版本中不对表达式求值),因此对于任何有函数调用的参数表达式,应该使用宏VERIFY(),以保证表达式中的函数调用在Release版本中会被正确求值。   3、TRACE()基本上就是函数printf()的一个复制品,唯一的区别是它把结果输出到调试窗口。在Release版本中,它也是无效的。   这三个宏在Release版本中

  • 思维方式的不同 - 人生感悟

      有段时间没写感悟了。今天是大年初六晚上,想到了就记录下来。   每个人的思维方式,随着年龄的增长会有所变化。在读书的时候,就想着学习,在工作了以后,就想着工作,在有了家庭之后,就想着家庭孩子,在父母老了之后,就想着赡养老人。但是,个人的思维方式的转变,不仅仅是这些,也是个人的生活环境等因素造成的,也是个人的努力方向不同而造成的。   在上学的时候,小学有小学的思维方式,中学有中学的思维方式,大学有大学的思维方式。小学的时候,只需要学好语文数学,其它的都是附加的学科。所以,小学的时候思维是比较简单的,个人认为,比较喜欢小学里开设兴趣班之类的学习内容,这样学生能够根据自己的爱好去学相关的知识,想到这个,有点类似大学里的选修课的,现在说这个,估计是受大学的影响吧。中学的时候,因为课程增加到了7门,所以思维方式基本上围绕着课程展开,当然,有些学校也有其它的课程,比如绘画、电脑课程等,这些是笔者以前的中学里有得内容,现在觉得学校当时还不错,比其它学校的课程好挺多的,而且也有相关的兴趣课程,对于学生来说,初中就是为了高中打基础,但是笔者现在回顾自己的中学路程,初中和高中课程的难易程度是两回事。

  • 粒度的影响

    针对类似于广晟有色这样的股票,在横盘期间制定的策略,通过反复的波段,降低成本,效果还是很显著的,能够从32的成本降到23,仓位基本没有太大变化。上图中基准收益选择的就是广晟有色本身,二者收益率的差值,表现出来就是成本的降低。原始策略,将每个0.5元划分为一个区间,股价达到某个区间后,通过对应数组进行判断和分析,操作。前面帖子有代码。今天对区间和对冲获利的距离进行了测试,区间从0.5调到0.1,获利距离从1到4,这是结果:结论:因为设定的操作点,是由成交量、价格、仓位等诸多因素决定的,此时价格相对固定,在这块优化,并不能改变或者选择更好的价位,所以优化效果有限。

  • 英汉翻译功能的简单实现

    usingSystem; usingSystem.Net; usingSystem.Xml; usingSystem.IO; usingConsoleApplication1; staticclassTranslationSample { staticvoidMain() { //AppId就是ApplicationId的缩写,这个是必须参数,需要用户自己创建,可能是微软想知道是谁在用他的东西。 //需要在bing开发中心(http://cn.bing.com/developers)注册并创建AppID那个是英文网站,这里就用我的吧。 stringAppId="305713700E4A0E87E1BD013C0E784E204E9163B6"; //你要翻译的文字 stringquery="whatthefuckisEnglish"; //翻译的原语言,这个不是乱写的,有规定,简体中文zh-cn中文繁体zh-tw英式英语en-gb美式英语en-us stringsoureLanguage="en-us"; //翻译的目标语言 stringtargetLanguage="zh-cn"

  • centos5.7下的kdump

    我的centos5.7是台虚拟机,用的是virtualbox安装的。安装的时候安装模式我没有选择图像界面,而是最小化安装,即只有命令行。 1,从上图可以看出我的kdump没有安装(5.7最小化安装没有装kdump),我的内存给的是4096而到了这里只能使用3个G。 2,接下来安装kexec-tools、kernel-debuginfo和kernel-debuginfo-common。kexec-tools这个包装了之后才有kdump服务,安装kernel-debuginfo和kernel-debuginfo-common是因为crash分析vmcore文件时要用到它的vmlinux文件,不安装的话找不到vmlinux文件就无法使用crash分析vmcore文件了。我这儿kernel-debuginfo和kernel-debuginfo-common事先已经从官网下载好了。 3,安装好了之后我们看一眼kdump的状态。看到状态是notoperational,即不能操作,因为我们还没有配置kdump,也还没有启动它。 4,配置kdump。我把配置过程放进了脚本当中。当然这个配置过程的

  • 51nod 1127 最短的包含字符串

    给一串字符串,求最短的包含‘A’-‘Z’字母的子串。 尺取。 #include<cstring> #include<cstdio> #include<cmath> #include<algorithm> #include<iostream> #defineinf0x3f3f3f3f #definelllonglong usingnamespacestd; strings; intcnt[26]; intans=inf; inlineboolcheck(){ for(inti=0;i<26;i++) if(!cnt[i])return0; return1; } intmain(){ cin>>s; intl=0,r=0; while(r<s.size()){ cnt[s[r++]-'A']++; while(check()){ cnt[s[l++]-'A']--; ans=min(ans,r-l+1); if(!check()){ cnt[s[--l]-'A']++; break; } } } i

  • CSS3 边框 border-image

    border-image:xxxxxx  是一系列参数的简写,该属性将图片作为边框修饰 border-image-source:url(border.png);  图片url地址 border-image-slice:20%20% 20% 20%;  图片切片位置,4条线将图片切为9格宫。上,左,下,右可调,四角跟随变化,中心去掉 border-image-width:10px10px10px 10px;  图片上,左,下,右切片的宽度  border-image-outside:0px0px0px0px;  图片填充时与边框上下左右的距离 border-image-repeat:repeatround;    图片在水平方向和竖直方向的平铺方式 border-image:sourceslicewidthoutsetrepeat;  简写 BUG常伴吾身

  • Redis系列(二):Redis的数据类型及命令操作

    原文链接(转载请注明出处):Redis系列(二):Redis的数据类型及命令操作 Redis中常用命令 Redis官方的文档是英文版的,当然网上也有大量的中文翻译版,例如:Redis命令参考。这里只列举常用到几个基本命令。 命令 行为 setkeyvalue 设置key值为value getkey 读取key的值 delkey 删除key expirekeyseconds 设置key的生存时间(seconds秒后自动删除) ttlkey 查看key剩余生存时间 existskey 判断key是否存在 ping 测试与服务端是否联通 keys* 匹配数据库中所有key dbsize 查询当前数据库中key的数量 info 返回关于Redis服务器的各种信息和统计数值 flushdb 清空当前数据库中的所有key flushall 清空整个Redis服务器的数据(删除所有数据库的所有key) quit 请求服务器关闭与当前客户端的连接(断开连接) Redis数据类型简介 数据类型 存储的值 读写能力

  • seall的Java IO流总结

    Java流类图结构:   流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。    IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流   字符流和字节流 字符流的由来:因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。字节流和字符流的区别: 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。 处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。 结论:只要是处理纯文本数据,就优先考虑使用字符流。除此之外都使用字节流。   输入流和输出流 对输入流只能进行读操作,对输出流只能进行写操作,程序中需要根据待传输数据的不同特性而使用不同的流。    JavaIO流对象 1.输入字节

  • 腾讯算法面试题

    最近公司经常有些分享会,前几天有个某婚恋网元老级程序员跳到我们公司并做了次分享,内容是一些算法方面的。 闲来无事动动脑。偶见一腾讯面试题 http://wenku.baidu.com/link?url=GkotlTmLLZREnmZUhWgRxe4qjeGxRZ9cPiz33uJmGU86YOhixx7U9iB5OFqSVU5uV3budQId38AUCZWVSXGvdFt1xjO1miHbeQgRRCbhAu3 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的相对顺序比如:input:1,7,-5,9,-12,15ans:-5,-12,1,7,9,15要求时间复杂度O(N),空间O(1)   这是我的代码,欢迎朋友指正:   publicstaticvoidtxsort(int[]array) { intnegCount=0; intlength=array.length; intnegIndex=0; for(inti=0;i<length;i++) { if(array[i]<0) negCount++; } if(

  • 实验三

    task1 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<windows.h> #defineN80 voidprintText(intline,intcol,chartext[]); voidprintSpaces(intn); voidprintBlanklines(intn); intmain() { intline,col,i; chartext[N]="hi,May~"; srand(time(0)); for(i=1;i<=10;++i) { line=rand()%25; col=rand()%80; printText(line,col,text); Sleep(1000); } return0; } voidprintSpaces(intn) { inti; for(i=1;i<=n;i++) printf(""); } voidprintBlanklines(intn) { inti; for(i=1;i<=n

  • 【总结】RSS Hub使用经验

    Editor:Veagau Time:2019.10.28 目录一、RSSHub的使用二、RSS使用1.Windows2.MAC3.Android 一、RSSHub的使用 力求简单,能用图形界面操作的就用图形界面操作。 ForkRSSHub仓库到自己的GitHub账号下 将自己的RSSHub仓库中download或clone到本地 进入到项目文件夹中,在本地部署RSSHub环境 安装依赖。执行如下命令: npminstall 复制 或 yarn 复制 执行上述命令的前提时你已经在计算机上安装了npm或yarn,具体安装过程不赘述。 注意: 安装后记得配置全局变量、然后重启项目终端。 npm安装速度缓慢,不太推荐。 有些依赖只兼容python2.x。如果没有Python2.x,在安装过程中会抛出Error,但实测不影响使用 启动RSSHub开发环境。 npmrundev 复制 或 yarndev 复制 在浏览器上打开链接:localhost:1200,显示RssHub界面即部署成功。 添加脚本路由。修改RSSHub>lib路径

  • UVA136 Ugly Numbers

    链接:https://cn.vjudge.net/problem/UVA-136     优先队列是一种抽象数据结构(AbstractDataType,ADT),行为有些想队列,但先出队列的元素不是先进队列的元素,而是队列中优先级最高的元素,这样就可以允许类似于”急病病人插队“这样的事情发生。     STL的优先队列也定义在头文件<queue>里,用”priority_queue<int>pq“来声明。这个pq是一个”越小的整数优先级越低的优先队列“。由于出对元素并不是最先进队的元素,出对的方法由queue的front()变为了top()。     自定义类型也可以组成优先队列,但必须为每个元素定义一个优先级。这个优先级并不需要一个确定的数字,只需要能比较大小即可。看到这里,是不是想起了sort?没错,只要元素定义了”小于“运算符,就可以使用优先队列。在一些特殊的情况下,需要使用自定义方式比较优先级,例如,要实现一个“个位数大的整数优先级反而

  • Python递归遍历目录下所有文件

    方法一 importos defgci(filepath): #遍历filepath下所有文件,包括子目录 files=os.listdir(filepath) forfiinfiles: fi_d=os.path.join(filepath,fi) ifos.path.isdir(fi_d): gci(fi_d) else: printos.path.join(filepath,fi_d) #递归遍历/root目录下所有文件 gci('/root') 复制 方法二 importos forfpathe,dirs,fsinos.walk('/root'): forfinfs: printos.path.join(fpathe,f) 复制 作者:皎然CEO 链接:https://www.cnblogs.com/jiaoran/p/14546413.html 个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人! 如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦(っ•̀ω•́)っ✎⁾⁾!

相关推荐

推荐阅读