范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

性能超Python30倍676个股票衍生特征计算的流批一体实现方案

  随着算力的提升和机器学习与深度学习的普及,在进行数据建模时往往会采用批量生成衍生特征的方法来丰富数据集的特征,如:对原有的 10 维特征都采用 max, min, avg, std, sum 这五种方式进行聚合,数据的特征将变为 50 维。
  类似的衍生特征工程极大地提升了模型的准确性。在 Python 中,调用 Pandas 的 agg 函数,传入一个字典(key:列名,value:衍生特征的函数列表)即可实现这样的衍生特征计算。本教程将通过DolphinDB的元编程 ,以极少的代码量实现与 pandas 中类似的衍生特征计算方法。
  我们使用 2021 年 16 支股票的 Level 2 快照数据,构建频率为 10 分钟的特征,并利用元编程, 低代码量 实现了 676 列衍生特征的计算。与多个 Python Pandas 进程并行计算相比, DolphinDB 能带来约 30 倍的性能提升。 教程还展示了如何在生产环境中用流式计算进行输入特征的实时计算。 本教程示例代码必须在 2.00.6 及以上版本的 DolphinDB server上运行。
  1. Snapshot 数据文件结构
  本教程应用的数据源为上交所 level2 快照数据(Snapshot),每幅快照间隔时间为 3 秒或 5 秒,数据文件结构如下:
  字段
  含义
  字段
  含义
  字段
  含义
  SecurityID
  证券代码
  LowPx
  最低价
  BidPrice[10]
  申买十价
  DateTime
  日期时间
  LastPx
  最新价
  BidOrderQty[10]
  申买十量
  PreClosePx
  昨收价
  TotalVolumeTrade
  成交总量
  OfferPrice[10]
  申卖十价
  OpenPx
  开始价
  TotalValueTrade
  成交总金额
  OfferOrderQty[10]
  申卖十量
  HighPx
  最高价
  InstrumentStatus
  交易状态
  ……
  ……
  2021 年上交所所有股票的快照数据已经提前导入至 DolphinDB 数据库中,一共约17.07亿条数据,导入方法见国内股票行情数据导入实例。 2. 教程开发背景
  本教程受 Kaggle 的 Optiver Realized Volatility Prediction 竞赛项目启发,该项目排名第一的代码中使用了两档的买卖量价数据及 pandas 的元编程实现了批量衍生特征的计算,本教程在此基础上,使用真实十档买卖量价的快照数据实现了 676 列衍生特征的计算。 2.1 一级指标
  一级指标全部由快照数据中的 10 档买卖单量价数据计算而来 Weighted Averaged Price(wap) :加权平均价格
  Price Spread(priceSpread) :用于衡量买单价和卖单价的价差
  Bid Price Spread(bidSpread) :用于衡量买 1 价和买 2 价的价差
  Offer Price Spread(offerSpread) :用于衡量卖1价和卖2价的价差
  Total Volume(totalVolume) :10 档买卖单的总量
  Volume Imbalance(volumeImbalance) :买卖单总量不平衡
  Log Return of Offer Price(logReturnOffer) :卖单价的对数收益
  Log Return of Bid Price(logReturnBid) :买单价的对数收益
  2.2 二级指标
  二级指标全部由一级指标计算生成 WAP Balance(wapBalance) :加权平均价格平衡
  Log Return of WAP(logReturnWap) :加权平均价格对数收益
  2.3 衍生特征
  衍生特征是对一级指标和二级指标做 10 分钟降采样的衍生,降采样的聚合方法通过元编程来批量实现,衍生方法如下:
  指标名称
  衍生方法
  DateTime
  count
  Wap[10]
  sum, mean, std
  LogReturn[10]
  sum, realizedVolatility, mean, std
  LogReturnOffer[10]
  sum, realizedVolatility, mean, std
  LogReturnBid[10]
  sum, realizedVolatility, mean, std
  WapBalance
  sum, mean, std
  PriceSpread
  sum, mean, std
  BidSpread
  sum, mean, std
  OfferSpread
  sum, mean, std
  TotalVolume
  sum, mean, std
  VolumeImbalance
  sum, mean, std
  最终预测的计算指标为实际波动率: Realized Volatility(realizedVolatility) :实际波动率
  同时考虑到,过去 10 分钟的特征中,特征的时效性是随时间增加的,越靠前的特征时效性越弱,越靠后的特征时效性越强。所以,本教程对 10 分钟的特征切分成了 0-600s(全部),150-600s,300-600s,450-600s 四段,分别进行上述衍生指标的计算。
  10 分钟的快照数据最终形成 676 维的聚合特征,如下图所示。
  3. DolphinDB 元编程计算代码开发
  本教程中的重点和难点是批量生成大量特征列计算表达式,如果按照传统 SQL 来编程,实现 676 个计算指标需要编写大量代码,因此本教程使用元编程方法实现衍生特征的计算,关于元编程的详情请参考 元编程 — DolphinDB 2.0 文档 。本教程通过元编程函数 sql 生成元代码。为了对快照数据做 10min 的聚合计算,sql 函数的分组参数  groupby=[, ]  。在自定义聚合函数中,首先进行一二级指标计算,再进行衍生特征计算。通过 DolphinDB 元编程对 level2 快照数据完成 676 列衍生特征的完整计算代码如下: DolphinDB 批计算代码:十档量价数据用多列存储。 DolphinDB 批计算代码(数组向量版):十档量价数据用数组向量存储。 3.1 一二级指标计算
  自定义聚合函数的入参是某支股票的 BidPrice, BidOrderQty, OfferPrice, OfferOrderQty 这四个十档量价数据的矩阵,在 DolphinDB 中对一二级指标的计算代码如下:  wap = (BidPrice * OfferOrderQty + BidOrderQty * OfferPrice)  (BidOrderQty + OfferOrderQty)  wapBalance = abs(wap[0] - wap[1])  priceSpread = (OfferPrice[0] - BidPrice[0])  ((OfferPrice[0] + BidPrice[0])  2)  BidSpread = BidPrice[0] - BidPrice[1]  OfferSpread = OfferPrice[0] - OfferPrice[1]  totalVolume = OfferOrderQty.rowSum() + BidOrderQty.rowSum()  volumeImbalance = abs(OfferOrderQty.rowSum() - BidOrderQty.rowSum())  LogReturnWap = logReturn(wap)  LogReturnOffer = logReturn(OfferPrice)  LogReturnBid = logReturn(BidPrice)3.2 衍生特征计算
  利用 Python 的 pandas 库,通过向 groupby.agg 传入一个字典(字典的 key 为列名,value为聚合函数列表),即可实现对指定的列进行批量的聚合指标计算。
  在 DolphinDB 中,亦可通过自定义函数实现类似的需求,即把字典转换成元编程代码,具体代码如下:  def createAggMetaCode(aggDict){      metaCode = []      metaCodeColName = []      for(colName in aggDict.keys()){          for(funcName in aggDict[colName])          {              metaCode.append!(sqlCol(colName, funcByName(funcName), colName + `_ + funcName$STRING))              metaCodeColName.append!(colName + `_ + funcName$STRING)          }      }      return metaCode, metaCodeColName$STRING  }    features = {      "DateTime":[`count]  }  for( i in 0..9)  {      features["Wap"+i] = [`sum, `mean, `std]      features["LogReturn"+i] = [`sum, `realizedVolatility, `mean, `std]      features["LogReturnOffer"+i] = [`sum, `realizedVolatility, `mean, `std]      features["LogReturnBid"+i] = [`sum, `realizedVolatility, `mean, `std]  }  features["WapBalance"] = [`sum, `mean, `std]  features["PriceSpread"] = [`sum, `mean, `std]  features["BidSpread"] = [`sum, `mean, `std]  features["OfferSpread"] = [`sum, `mean, `std]  features["TotalVolume"] = [`sum, `mean, `std]  features["VolumeImbalance"] = [`sum, `mean, `std]  aggMetaCode, metaCodeColName = createAggMetaCode(features)
  返回结果为元代码向量和对应的元代码列名,如下图所示:
  在自定义函数中,为了方便后续使用元编程进行衍生特征计算,需要将计算的一二级指标拼接成一个 table,同时修改列名,具体代码如下: subTable = table(DateTime as `DateTime, BidPrice, BidOrderQty, OfferPrice, OfferOrderQty, wap, wapBalance, priceSpread, BidSpread, OfferSpread, totalVolume, volumeImbalance, LogReturnWap, LogReturnOffer, LogReturnBid)  colNum = 0..9$STRING  colName = `DateTime <- (`BidPrice + colNum) <- (`BidOrderQty + colNum) <- (`OfferPrice + colNum) <- (`OfferOrderQty + colNum) <- (`Wap + colNum) <- `WapBalance`PriceSpread`BidSpread`OfferSpread`TotalVolume`VolumeImbalance <- (`LogReturn + colNum) <- (`LogReturnOffer + colNum) <- (`LogReturnBid + colNum)  subTable.rename!(colName)
  其中 "<-" 是 DolphinDB 函数 join 的简写符号,此处用于将各字段拼接成列向量。
  最后将元代码作为参数传入自定义聚合函数,配合一二级指标拼接而成的 table 进行 676 列衍生指标的计算,并以 676 列的形式作为聚合结果返回,具体代码如下:  subTable["BarDateTime"] = bar(subTable["DateTime"], 10m)  result = sql(select = aggMetaCode, from = subTable).eval().matrix()  result150 = sql(select = aggMetaCode, from = subTable, where = = (time(BarDateTime) + 150*1000) >).eval().matrix()  result300 = sql(select = aggMetaCode, from = subTable, where = = (time(BarDateTime) + 300*1000) >).eval().matrix()  result450 = sql(select = aggMetaCode, from = subTable, where = = (time(BarDateTime) + 450*1000) >).eval().matrix()  return concatMatrix([result, result150, result300, result450])
  部分计算结果展示
  所有衍生特征列名展示
  4. DolphinDB vs Python测试数据为实盘16只证券标的的十档快照数据,总记录数为 19,220,237。 计算逻辑为按股票代码分组,计算 676 个 10 分钟聚合指标。 DolphinDB 和 Python 的 CPU 计算调用资源都是 8 核。 DolphinDB 批计算代码:十档量价数据用多列存储。 DolphinDB 批计算代码(数组向量版):十档量价数据用数组向量存储。 Python 批计算代码。
  由于 DolphinDB 的计算是分布式并行计算,本教程中配置的并行度为 8,因此在使用 Python 实现衍生特征计算时,也采用了 8 的并行度进行并行计算,即同时调用 8 个 Python 进程进行计算。
  计算性能对比结果
  股票数量
  交易日
  数据量
  Python(s)
  DolphinDB(s)
  16
  243
  19,220,237   3,039   100 5. 模型构建   选取 16 支股票 (601318,600519,600036,600276,601166,600030,600887,600016,601328,601288,600000,600585,601398,600031,601668,600048) 2022年 09:30:00-11:30:00 和 13:00:00-15:00:00 的 level2 快照进行模型训练。   DolphinDB 支持一系列常用的机器学习算法,例如最小二乘回归、随机森林、K-平均等,使用户能够方便地完成回归、分类、聚类等任务。除了内置的经典的机器学习算法函数,DolphinDB 还支持许多第三方库,因此我们也可以调用 DolphinDB 提供的第三方库插件来进行模型训练。   XGBOOST(Extreme Gradient Boosting)是一种 Tree Boosting 的可扩展机器学习系统,它在 Gradient Boosting 框架下实现机器学习算法,提供了并行树提升(也称为 GBDT,GBM),可以快速准确地解决许多数据科学的问题。   本教程参考机器学习教程-5.使用 DolphinDB 插件进行机器学习,选取 XGBOOST 进行训练。   参考:XGBOOST 插件安装教程   模型评价指标:根均方百分比误差(Root Mean Square Percentage Error, RMSPE)   参考:模型构建和训练代码 5.1 数据处理   删除掉含 NULL 的记录,标注 label 并将构造出来的 676 维特征适当调整为 XGBOOST 输入的数据格式,具体代码如下: //将计算出来的特征中包含 NULL 的记录删除 result = result[each(isValid, result.values()).rowAnd()] result_input = copy(result) //选取 LogReturn0_realizedVolatility 作为label label = result[`LogReturn0_realizedVolatility] //将 SYMBOL 型的 SecurityID 列转换为 XGBOOST 模型支持输入的 INT 型 result_input.update!(`SecurityID_int, int(result[`SecurityID])) //调整输入的字段,去除不需要的列 result_input.dropColumns!(`SecurityID`DateTime`LogReturn0_realizedVolatility)   注意:本次预测值为未来 10 分钟的波动率,WAP_0 最接近股价,所以选取 LogReturn0_realizedVolatility 作为 label 。 5.2 划分训练集和测试集   本项目中没有设置验证集,训练集和测试集按 7:3 比例划分,即 train:test = 62514:26804,具体代码如下: def trainTestSplit(x, testRatio) { xSize = x.size() testSize =( xSize * (1-testRatio))$INT return x[0: testSize], x[testSize:xSize] } Train_x, Test_x = trainTestSplit(result_input, 0.3) Train_y, Test_y = trainTestSplit(label, 0.3)5.3 训练及评价   DolphinDB 的 XGBOOST 插件中包含 4 个用户接口: 用于训练模型的 xgboost::train() ; 用于预测的 xgboost::predict ; 用于保存模型到磁盘的 xgboost::saveModel ; 用于从磁盘上加载模型的 xgboost::loadModel 。   具体使用方法的说明参见 DolphinDB XGBoost 插件用户接口教程。   具体代码如下: //定义评估指标 RMSPE(Root Mean Square Percentage Error) def RMSPE(a,b) { return sqrt( sum( ((a-b)a)*((a-b)a) ) a.size() ) } //定义模型训练的参数 params = { objective: "reg:squarederror", colsample_bytree: 0.8, subsample: 0.8, min_child_weight: 1, max_leaves:128, eta: 0.1, max_depth:10, eval_metric : "rmse" } //XGBOOST 模型训练 model_1 = xgboost::train(Train_y ,Train_x, params, 500) //用测试集预测波动率,并计算 RMPSE y_pred = xgboost::predict(model_1, Test_x) print("RMSPE="+RMSPE(Test_y, y_pred))   运行结果: RMSPE:0.559 模型训练时间:1m 3s 327ms   本次预测采取手动粗调参,不代表模型以及应用的最优结果。   模型保存及加载: //保存模型,modelSavePath 为保存模型的路径,需要根据实际环境配置 xgboost::saveModel(model_1, modelSavePath) //模型加载,modelSavePath 为模型的路径,需要根据实际环境配置 model = xgboost::loadModel(modelSavePath)   回归模型预测性能   数据量(条)   模型预测时间(ms)   1
  0.936   10
  1.832   100
  9.314   1000
  49.274   10000
  317.656 6. 流计算实现   以上部分的计算都是基于批量历史数据的计算,而在实际生产环境中,数据的来源往往是以"流"的方式,而如何套用上述复杂的衍生特征计算逻辑实现流式计算是业务层面面临的重大难题。   对于这类问题,DolphinDB 内置了多种类型的流计算引擎,以提供简易快捷的低延时解决方案。   DolphinDB 流计算代码,请参考知乎原文附件 6.1 流计算实现架构   流计算处理流程   上图对应本章节整体的流程框架:实时的流数据首先通过 DolphinDB API 注入至 snapshotStream 表中。然后通过订阅/推送,将快照数据注入至时间序列聚合引擎,进行窗口为10分钟,步长为10分钟的滑动窗口计算,核心代码如下: 定义存储 snapshot 的流数据表 snapshotStream ,特征工程结果表 aggrFeatures10min ,以及后续模型预测的结果表 result10min 。 name = `SecurityID`DateTime`PreClosePx`OpenPx`HighPx`LowPx`LastPx`TotalVolumeTrade`TotalValueTrade`BidPrice0`BidPrice1`BidPrice2`BidPrice3`BidPrice4`BidPrice5`BidPrice6`BidPrice7`BidPrice8`BidPrice9`BidOrderQty0`BidOrderQty1`BidOrderQty2`BidOrderQty3`BidOrderQty4`BidOrderQty5`BidOrderQty6`BidOrderQty7`BidOrderQty8`BidOrderQty9`OfferPrice0`OfferPrice1`OfferPrice2`OfferPrice3`OfferPrice4`OfferPrice5`OfferPrice6`OfferPrice7`OfferPrice8`OfferPrice9`OfferOrderQty0`OfferOrderQty1`OfferOrderQty2`OfferOrderQty3`OfferOrderQty4`OfferOrderQty5`OfferOrderQty6`OfferOrderQty7`OfferOrderQty8`OfferOrderQty9 type =`SYMBOL`TIMESTAMP`DOUBLE`DOUBLE`DOUBLE`DOUBLE`DOUBLE`INT`DOUBLE`DOUBLE`DOUBLE`DOUBLE`DOUBLE`DOUBLE`DOUBLE`DOUBLE`DOUBLE`DOUBLE`DOUBLE`INT`INT`INT`INT`INT`INT`INT`INT`INT`INT`DOUBLE`DOUBLE`DOUBLE`DOUBLE`DOUBLE`DOUBLE`DOUBLE`DOUBLE`DOUBLE`DOUBLE`INT`INT`INT`INT`INT`INT`INT`INT`INT`INT share streamTable(100000:0, name, type) as snapshotStream share streamTable(100000:0 , `DateTime`SecurityID <- metaCodeColName <- (metaCodeColName+"_150") <- (metaCodeColName+"_300") <- (metaCodeColName+"_450"),`TIMESTAMP`SYMBOL <- take(`DOUBLE, 676)) as aggrFeatures10min share streamTable(100000:0 , `Predicted`SecurityID`DateTime, `FLOAT`SYMBOL`TIMESTAMP) as result10min注册时间序列聚合计算引擎 metrics=sqlColAlias(, metaCodeColName <- (metaCodeColName+"_150") <- (metaCodeColName+"_300") <- (metaCodeColName+"_450")) createTimeSeriesEngine(name="aggrFeatures10min", windowSize=600000, step=600000, metrics=metrics, dummyTable=snapshotStream, outputTable=aggrFeatures10min, timeColumn=`DateTime, useWindowStartTime=true, keyColumn=`SecurityID)第一个订阅:订阅 snapshotStream 流数据表中的实时增量数据 subscribeTable(tableName="snapshotStream", actionName="aggrFeatures10min", offset=-1, handler=getStreamEngine("aggrFeatures10min"), msgAsTable=true, batchSize=2000, throttle=1, hash=0, reconnect=true)第二个订阅:实时获取 aggrFeatures10min 表中的特征数据,使用已训练好的模型来进行波动率预测,并将最终结果导入到 result10min 表中。 def predictRV(mutable result10min, model, mutable msg){ startTime = now() temp_table = select SecurityID, DateTime from msg msg.update!(`SecurityID_int, int(msg[`SecurityID])).dropColumns!(`SecurityID`DateTime`LogReturn0_realizedVolatility) Predicted = xgboost::predict(model , msg) temp_table_2 = table(Predicted, temp_table) result10min.append!(temp_table_2) } subscribeTable(tableName="aggrFeatures10min", actionName="predictRV", offset=-1, handler=predictRV{result10min, model}, msgAsTable=true, hash=1, reconnect=true)   上述脚本定义的 metrics 中调用的 featureEngineering 函数与批计算的代码脚本中的定义完全相同,体现了 DolphinDB 流批一体 的优势特点。   附件的流计算示例代码,通过历史数据回放的方式,回测实盘波动率预测的结果展示:   6.2 流计算延时统计   本章节统计了股票在时序聚合引擎中的计算延时情况,流计算延时主要由两部分构成: 计算聚合特征的耗时 和 模型预测实时波动率的耗时 。主要延时为计算聚合特征的耗时。 计算聚合特征耗时: timer getStreamEngine("aggrFeatures10min").append!(data)模型预测实时波动率的耗时: test_x = select * from aggrFeatures10min timer{ temp_table = select SecurityID, DateTime from test_x test_x.update!(`SecurityID_int, int(test_x[`SecurityID])).dropColumns!(`SecurityID`DateTime`LogReturn0_realizedVolatility) Predicted = xgboost::predict(model , test_x) }统计结果:   股票数量   10分钟数据量   计算聚合特征耗时   模型预测实时波动率的耗时   总耗时   1
  201
  22ms   3ms   25ms   10
  2011
  92ms   3ms   95ms   20
  4020
  162ms   4ms   168ms   30
  6030
  257ms   5ms   262ms   40
  8040
  321ms   6ms   327ms   50
  10054
  386ms   7ms   393ms 7. 总结   本教程通过使用 DolphinDB 强大的数据处理能力,并结合元编程实现了低代码批量生成多维股票衍生特征的应用场景。与 Python 等传统数据处理方法相比,DolphinDB 依靠数据存储引擎和计算引擎的高度融合,在数据预处理阶段,方便地实现了分布式并行计算,不仅节约了内存资源,而且在使用相同物理计算资源的情况下,提高了约 30 倍的计算效率。   在批计算的基础上,本教程利用 DolphinDB 内置的流计算处理框架,为实际生产环境的类似需求(实时计算衍生特征、实时调用模型预测计算)提供了一套完整高效的解决方案。本教程以上证 16 支股票 level2 快照数据作为订阅的数据源,通过模式真实数据的实时注入,可以在毫秒级完成对每只股票 10 分钟快照数据衍生676 维衍生特征的低延时计算,从而为后续的数据建模提供强大的数据支撑。 附录   注意事项:本教程示例代码必须在 2.00.6 及以上版本的DolphinDB server上运行。   DolphinDB批计算代码   DolphinDB批计算代码(数组向量版)   模型构建和训练代码   Python批计算代码   DolphinDB流计算代码   level2快照测试数据   附录文件请见知乎原文   开发环境 CPU 类型:Intel(R) Xeon(R) Silver 4216 CPU @ 2.10GHz 逻辑 CPU 总数:8 内存:64GB OS:64位 CentOS Linux 7 (Core) 磁盘:SSD 盘,最大读写速率为 520MB/s server 版本:2.00.6 server 部署模式:单节点 2.00 配置文件:dolphindb.cfg (volumes, persistenceDir, TSDBRedoLogDir 需要根据实际环境磁盘路径修改) 单节点部署教程:单节点部署

求地球表面光子的密集度光速是299792458ms,一个光子一秒内产生的能量是6。626070151034J,根据动能定理12mv26。626070151034J12m(299792458ms)26。6XYG41DYG,九月韩信首秀很亮眼,S组包揽六强,XYG还在创造奇迹KPL秋季赛季后赛依旧在进行当中,深圳DYG和XYG上演了一场浴缸之战,大浴缸大战小浴缸。这场比赛的重要性毋庸置疑,赢的队伍能进入六强,并且能拿到挑战者杯的参赛资格。这场比赛的第五Epic商店限时免费领取神陨挑战者版和监狱建筑师一星期过去了,又到E宝送福利的日子,一起来看看本周赠送是什么游戏吧!本周Epic商店赠送的两款免费游戏分别第三人称动作格斗RPG游戏神陨挑战者版(GodfallChallenger原神获评TGA2021最佳手游奖!腾讯尴尬了没上榜今日,游戏界盛典的TheGameAwards(TGA2021)颁奖典礼已经正式结束,双人成行不负众望拿下了分量最足的年度游戏大奖,死亡循环极限竞速地平线5等游戏也收获颇丰。而在这些终于实锤了!小天韩服改名明示确定新队,TES组成全神班前言转会期临近尾声,知情人已经爆料出八支战队确定明年的主力首发阵容。在这次转会期,有着多次反转的情况,有的是选手临时反悔,亦或是俱乐部临时改约。同时,在这次转会期,全神班的噱头非常9块9神价购Alineware外星人鼠标今儿最后1天是的你没看错,就是那个令游戏玩家心驰神往的Alineware外星人。近日,外星人AW510M游戏鼠标惊爆价来袭,预约抽签可享9块9超级低价购买资格,一个账号仅能购买一个,运气好的小AG超玩会票数再次反超EDG,XYG闷声发大财,KPL三大顶流势均力敌KPL秋季赛季后赛愈演愈烈,粉丝除了需要观战主队比赛以外,还需要给俱乐部和选手进行投票,争夺十大影响力电竞俱乐部和十大影响力电竞选手的名号。而在这些榜单之中,最过繁忙的就是AG超玩苍之骑士团2手游第一批ssr级角色芙缇怎么样?如何提升芙缇胜率手游巴士(www。shouyoubus。com)2021年12月10日讯苍之骑士团2手游第一批ssr级角色芙缇怎么样?如何提升芙缇胜率?在苍之骑士团2这款手游中有很多玩家都对芙缇的谁给梦幻西游冷门门派带来春天?我们又来盘了一下梦幻西游2021年年终盘点系列文章继续推出,今天要聊的是九头妖王绮梦长安这两部资料片。除了东海秘境之外,2021年梦幻西游电脑版还依次发布了九头妖王绮梦长安两部资料片,其中九头妖王当海水和岩浆相遇岩浆就是岩石在高温下形成的液太形状,一般火山爆发时就会产生大量的岩浆,并顺着山势往下流动,在流动的过程中会因为温度降低而散发大量的热度,并慢慢凝固。如果火山是在大海中,那么岩浆就会科学家证实超级火山导致2亿年前生物大灭绝2亿年前,一场生物大灭绝让超过一半地球生物消失。这场进化史上的浩劫因何而来?近日,中国地质大学(武汉)中科院南京地质古生物研究所领导的国际团队发现了有力证据,表明火山爆发是当时环境
紫金山天文台发现银河系中心有高能粒子加速器澎湃新闻记者刘航宇宙线是一种来自宇宙的高能粒子流,是研究众多物理和天文问题的重要信使,自1912年由Hess通过热气球发现以来,一直引起科学界的关注。最近,中国科学院南京紫金山天文关键证人帮助科学家探测到固体材料中幽灵般的量子纠缠一种物质的自旋,被描绘成红色的球体,被散射的中子探测。应用纠缠见证,如图中的QFI计算,使中子形成一种量子量规。这个测量仪允许研究人员区分经典和量子自旋涨落。资料来源美国能源部,内带你识宇宙我们的太阳系太阳系的起源,至今仍是未解之谜。到目前为止,科学家们还在钻研地球的邻星是如何形成的。日落我们对太阳系的起源知之甚少。但可以确定的是,太阳系如今的运行模式于45。68亿年前形成。在此强势围观!在这张幸运的红外图像中,木星看起来像一个火球完美的组合效应!一起来看看木星的幸运成像!图片来源国际双子座天文台NOIRLabNSFAura,M。H。Wong(加州大学伯克利分校)Gizmodo令人难以置信的是,这张令人惊叹的朱进仰望星空的天文人在哈雷彗星绕太阳运转的76年的周期中,其彗星轨道附近会散布大量尘埃碎片,由于哈雷彗星轨道与黄道面的两个交点离地球轨道都比较近,在地球自转过程中每年会有两次由哈雷彗星带来的天文奇观5索尼VS森海塞尔!当下音质最好的两部TWS真无线蓝牙耳机怎么选?现代人由于各种原因玩传统Hifi音响的人已经非常少了,而高品质的耳机的出现,又能给人们一种新的选择,玩耳机的人非常多,这类人常常被叫为耳机党,但是别忘了,有很多大烧家里放着几十万的三星Galaxyzflod3漂漂亮亮的壳才配得上你第3代的三星GalaxyZflod3是当前最为成熟的一代折叠屏,对于大屏智能手机有好感的人来讲,折叠屏设计说是青铜,没人敢说自己是王者接近小2万大洋的fold3应该没人选择裸机使用性能比麒麟999更强,12G256G定价亲民,120hz5065毫安手机市场现如今在手机市场上啊,华为的手机市场产品现在手机市场上的表现还是很不错的,但是要知道的是,现在的华为已经开始用骁龙处理器了。华为现在虽然已经能带来新的手机产品了,但是面对着当家主母蒋勤勤版那年花开月正圆,剧透慎点蒋勤勤主演的当家主母播出8集了,一开局就是大房捉奸掌掴小三的戏码,那叫一个刺激。奈禾几越往后看越不对,和那年花开月正圆设定很像一,女主丈夫的性格都挺善良的,都是开局没几集就被害死了花开之后,是自己的生活生命的每天你都会遇见不同的花。花开之后,余下来留给你的,将是永远都不会改变的生活。花开只是时光的试金石,要在每天的生活中看到生活中的美,花开之后一定要好好生活,你就可以成为自己想要感恩来过,正如花开花落当秋日的风儿掠过世间万物,在天空中畅意飞翔时,你是否有抬头看看,那天空中的蓝天白云景致的唯美,是多么的不可思议。感叹,惊喜,阵阵欢喜若云般的轻盈,心儿啊,是多么的欢愉,这尘世间的所