分析JHTDB数据库的Channel5200数据集的数据(SciServer服务器)

news2024/11/29 16:27:26

代码来自https://github.com/idies/pyJHTDB/blob/master/examples/channel.ipynb

%matplotlib inline
import numpy as np
import math
import random
import pyJHTDB
import matplotlib.pyplot as plt
import time as tt

N = 3
T = pyJHTDB.dbinfo.channel5200['time'][-1]
time = np.random.random()*T

spatialInterp  = 6  # 6 拉格朗日点
temporalInterp = 0  # 无时间插值
FD4Lag4        = 44 # 4 point Lagrange interp for derivatives

# mhdc has starttime .364 and endtime .376
startTime = time
endTime = startTime + 0.012
lag_dt = 0.0004

# Select points in the database to query
lpoints = []
for i in range(0,N):
    lpoints.append([random.uniform(0, 8*3.14),random.uniform(-1, 1),random.uniform(0, 3*3.14)])

# 2D array with single precision values
points = np.array(lpoints,dtype='float32')
# load shared library
lTDB = pyJHTDB.libJHTDB()
#initialize webservices
lTDB.initialize()

#Add token
auth_token  = "edu.jhu.pha.turbulence.testing-201311"  #Replace with your own token here
lTDB.add_token(auth_token)

print('Coordinates of {0} points where variables are requested:'.format(N))
for p in range(N):
    print('{0}: {1}'.format(p, points[p]))
print('Data is requested at time {0}'.format(time))

68a670ccc8944f25931799ce8dd923ef.png


下面是逐行分析

  • %matplotlib inline:在 Jupyter Notebook 中使 matplotlib 的图表内嵌显示。
  • numpymathrandom:用于数学运算和随机数生成。
  • pyJHTDB:用于访问 Johns Hopkins 湍流数据库 (JHTDB) 的 Python 包。
  • matplotlib.pyplot:用于绘图。
  • time:用于计时。
N = 3
T = pyJHTDB.dbinfo.channel5200['time'][-1]
time = np.random.random()*T

说明

  • N = 3:定义了要查询的点的数量。
  • T = pyJHTDB.dbinfo.channel5200['time'][-1]:获取 channel5200 数据集中时间序列的最后一个时间点,表示整个时间范围。
  • time = np.random.random() * T:生成一个随机的时间 time,范围从 0 到 T
spatialInterp  = 6  # 6 拉格朗日点
temporalInterp = 0  # 无时间插值
FD4Lag4        = 44 # 4 point Lagrange interp for derivatives
  • spatialInterp = 6:设置空间插值类型为 6 点拉格朗日插值。
  • temporalInterp = 0:时间插值设为无插值。
  • FD4Lag4 = 44:用于计算导数的 4 点拉格朗日插值。
startTime = time
endTime = startTime + 0.012
lag_dt = 0.0004

说明

  • startTime = time:设置查询的开始时间。
  • endTime = startTime + 0.012:设置查询的结束时间,时间范围为 0.012 单位。
  • lag_dt = 0.0004:设置时间步长为 0.0004。
lpoints = []
for i in range(0, N):
    lpoints.append([random.uniform(0, 8*3.14), random.uniform(-1, 1), random.uniform(0, 3*3.14)])

说明

  • 初始化 lpoints 为一个空列表。
  • 使用循环生成 N 个随机的坐标点,每个点是一个 [x, y, z] 的三维位置:
    • x 范围在 0
    • y 范围在 -11
    • z 范围在 0
points = np.array(lpoints, dtype='float32')


lTDB = pyJHTDB.libJHTDB()
lTDB.initialize()

说明

  • lpoints 转换为单精度浮点型的 NumPy 数组 points,用于之后的查询。
  • lTDB = pyJHTDB.libJHTDB():创建 libJHTDB 类的实例 lTDB,用于访问 JHTDB。
  • lTDB.initialize():初始化 JHTDB 服务,准备进行数据查询。
auth_token  = "edu.jhu.pha.turbulence.testing-201311"  #Replace with your own token here
lTDB.add_token(auth_token)


print('Coordinates of {0} points where variables are requested:'.format(N))
for p in range(N):
    print('{0}: {1}'.format(p, points[p]))
print('Data is requested at time {0}'.format(time))

说明

  • auth_token:设置授权令牌,用于访问 JHTDB 服务。
  • 如何将auth_token更换为自己的???
  • lTDB.add_token(auth_token):将授权令牌添加到 lTDB 实例,确保能够进行查询
  • 打印出 N 个点的坐标,显示每个点的位置。
  • 打印查询数据的随机时间 time

这段代码的作用是:

  • 导入必要的库和模块。
  • 生成 N 个随机的三维点,用于查询湍流数据库中的物理变量。
  • 设置插值和查询参数。
  • 初始化和授权 JHTDB 服务。
  • 打印出查询的坐标和时间,以便用户确认。

这段代码用于从 JHTDB 获取在特定时间和空间位置上的湍流数据,接下来可以调用相关方法来获取数据并进行分析。

print('Requesting pressure at {0} points...'.format(N))
result = lTDB.getData(time, points,data_set = 'channel',
        sinterp = spatialInterp, tinterp = temporalInterp,
        getFunction = 'getPressure')
for p in range(N):
    print('{0}: {1}'.format(p, result[p]))

e4d78517631a4917b9de1dd0a70176cd.png

说明

  • result 变量接收从 JHTDB 查询得到的数据。
  • lTDB.getData()libJHTDB 类中的方法,用于从数据库中获取物理量数据。以下是各参数的含义:
    • time:请求数据的时间。
    • points:一个包含查询空间位置的数组,即前面生成的 N 个随机点。
    • data_set='channel':指定使用的湍流数据集,这里是 channel 数据集。
    • 想获取别的数据集数据时如何知道别的数据集名称???
    • sinterp=spatialInterp:指定空间插值方法,这里使用的是 6 点拉格朗日插值。
    • tinterp=temporalInterp:指定时间插值方法,这里不使用时间插值。
    • 插值法的作用是什么?为什么要插值???
    • getFunction='getVelocity':指定要获取的数据是速度信息。
  • 遍历 result 数组并打印每个点的结果。
  • '{0}: {1}'.format(p, result[p]) 格式化输出,显示点的索引和对应的速度值。

总结

这段代码的作用是:

  • 从 JHTDB 请求特定时间和空间位置的速度数据。
  • 使用 getData() 方法进行查询。
  • 输出每个查询点的速度结果,方便用户查看和验证。
print('Requesting pressure at {0} points...'.format(N))
result = lTDB.getData(time, points,data_set = 'channel',
        sinterp = spatialInterp, tinterp = temporalInterp,
        getFunction = 'getPressure')
for p in range(N):
    print('{0}: {1}'.format(p, result[p]))

 同理,这段代码获取的压力值

4d02bf3744554b95b29b6ee30bf98ba1.png

print('Requesting velocity and pressure at {0} points...'.format(N))
result = lTDB.getData(time, points,data_set = 'channel',
        sinterp = spatialInterp, tinterp = temporalInterp,
        getFunction = 'getVelocityAndPressure')
for p in range(N):
    print('{0}: {1}'.format(p, result[p]))

这段代码获取的速度和压力值 

92dc96c2e8964b8e94316bc149c35868.png

print('Requesting velocity gradient at {0} points...'.format(N))
result = lTDB.getData(time, points,
        sinterp = FD4Lag4, tinterp = temporalInterp,data_set ='channel',
        getFunction = 'getVelocityGradient')
for p in range(N):
    print('{0}: '.format(p) +
          'duxdx = {0:+e}, duxdy = {1:+e}, duxdz = {2:+e}\n   '.format(result[p][0], result[p][1], result[p][2]) +
          'duydx = {0:+e}, duydy = {1:+e}, duydz = {2:+e}\n   '.format(result[p][3], result[p][4], result[p][5]) +
          'duzdx = {0:+e}, duzdy = {1:+e}, duzdz = {2:+e}'.format(result[p][6], result[p][7], result[p][8]))

2f5d9823edc14ee295099c5dbfa6309f.png

说明

  • 调用 lTDB.getData() 函数来获取速度梯度数据。
    • getFunction='getVelocityGradient':表示要获取速度梯度信息。
    • 遍历 result 数组,并格式化输出每个点的速度梯度。
    • result[p] 包含当前点的速度梯度,排列方式为 [duxdx, duxdy, duxdz, duydx, duydy, duydz, duzdx, duzdy, duzdz],分别表示速度分量 u、v、w 在 x、y、z方向上的偏导数。

4641833fdb814aa7a4e0640d435ac014.png

print('Requesting velocity hessian at {0} points...'.format(N))
result = lTDB.getData(time, points,data_set = 'channel',sinterp = FD4Lag4, tinterp = temporalInterp,
                      getFunction = 'getVelocityHessian')

for p in range(N):
        print('{0}: '.format(p) +
              'd2uxdxdx = {0:+e}, d2uxdxdy = {1:+e}, d2uxdxdz = {2:+e}\n   '.format(result[p][ 0], result[p][ 1], result[p][ 2])
            + 'd2uxdydy = {0:+e}, d2uxdydz = {1:+e}, d2uxdzdz = {2:+e}\n   '.format(result[p][ 3], result[p][ 4], result[p][ 5])
            + 'd2uydxdx = {0:+e}, d2uydxdy = {1:+e}, d2uydxdz = {2:+e}\n   '.format(result[p][ 6], result[p][ 7], result[p][ 8])
            + 'd2uydydy = {0:+e}, d2uydydz = {1:+e}, d2uydzdz = {2:+e}\n   '.format(result[p][ 9], result[p][10], result[p][11])
            + 'd2uzdxdx = {0:+e}, d2uzdxdy = {1:+e}, d2uzdxdz = {2:+e}\n   '.format(result[p][12], result[p][13], result[p][14])
            + 'd2uzdydy = {0:+e}, d2uzdydz = {1:+e}, d2uzdzdz = {2:+e}'.format(result[p][15], result[p][16], result[p][17]))

获取速度的二阶导数

5ce08a0ccf0646e0a1ba7f073530b7d6.png

说明

  • result 变量接收从 JHTDB 查询得到的速度 Hessian 数据。
  • lTDB.getData() 方法用于从数据库中获取数据,参数含义如下:
    • time:请求数据的时间。
    • points:一个包含查询空间位置的数组,即你之前生成的随机点。
    • data_set='channel':指定数据集,这里使用的是 channel 数据集。
    • sinterp=FD4Lag4:使用 4 点拉格朗日插值(FD4Lag4)计算导数,用于计算 Hessian。
    • tinterp=temporalInterp:指定时间插值方法,这里不使用时间插值(设为 0)。
    • getFunction='getVelocityHessian':指定要获取的数据是速度 Hessian。

0aff9d10ed4d47d795aa3df71010c627.png

print('Requesting velocity laplacian at {0} points...'.format(N))
result = lTDB.getData(time, points,
        sinterp = FD4Lag4, tinterp = temporalInterp, data_set = 'channel',
        getFunction = 'getVelocityLaplacian')
for p in range(N):
    print('{0}: '.format(p) +
          'grad2ux = {0:+e}, grad2uy = {1:+e}, grad2uz = {2:+e}, '.format(result[p][0], result[p][1], result[p][2]))

 81052262ee764bb39d2d1377c20e4bb0.png

850e1b551265488598d5df5edb5e86a5.png

标输出结果解释

8077317075e34ba1b4ffa3f1347d0e02.png da388be9b2eb4cbd899600007441ea9b.png

print('Requesting pressure hessian at {0} points...'.format(N))
result = lTDB.getData(time, points,
        sinterp = FD4Lag4, tinterp = temporalInterp, data_set = 'channel',
        getFunction = 'getPressureHessian')
for p in range(N):
    print('{0}: '.format(p) +
          'd2pdxdx = {0:+e}, d2pdxdy = {1:+e}, d2pdxdz = {2:+e}\n   '.format(result[p][0], result[p][1], result[p][2])
        + 'd2pdydy = {0:+e}, d2pdydz = {1:+e}, d2pdzdz = {2:+e}'.format(result[p][3], result[p][4], result[p][5]))
print('Requesting pressure hessian at {0} points...'.format(N))
result = lTDB.getData(time, points,
        sinterp = FD4Lag4, tinterp = temporalInterp, data_set = 'channel',
        getFunction = 'getInvariant')
for p in range(N):
    print('{0}: '.format(p) +
          'S2 = {0:+e}, O2 = {1:+e}'.format(result[p][0], result[p][1]))

000af9659b7d4bac8bbf186b3d4908cc.png

说明

  • 从数据库中获取指定时间和位置的压力 Hessian。
  • getFunction='getPressureHessian' 指定请求的是压力的 Hessian 数据。

返回数据结构

  • result[p] 包含每个查询点的 6 个分量,对应 Hessian 矩阵中不重复的上三角部分。
  • 打印每个点的压力 Hessian 分量。
  • result[p][0] 表示 ∂2p∂x2\frac{\partial^2 p}{\partial x^2}∂x2∂2p​,依次类推。
  • 使用科学计数法格式化输出,使结果更清晰。

a997eeaf0fe04c4db4e94ce1d2037161.png

86868330dc654ebe98bcf3881f95a872.png

result = lTDB.getThreshold(
            data_set = 'channel',
            field = 'vorticity',
            time = 0,
            threshold = 65,
            x_start = 1, y_start = 1, z_start = 1,
            x_end = 4, y_end = 4, z_end = 4,
            sinterp = 40,
            tinterp = 0)
for p in range(result.shape[0]):
    print('{0}: '.format(p)
        + 'i_x = {0}, i_y = {1}, i_z = {2}, value = {3} '.format(result[p][0], result[p][1], result[p][2],result[p][3]))

886879b6217c483c9d3fa6f6b5dc41af.png

逐句分析

  1. result = lTDB.getThreshold(...):

    • 使用 getThreshold 方法,从指定的 data_set(此处是 'channel')中获取满足特定阈值条件的涡量场('vorticity')数据点。
    • 参数 time = 0 指定在时间 t=0 时刻获取数据。
    • 参数 threshold = 65 表示提取涡量值大于或等于 65 的点。
    • x_start, y_start, z_startx_end, y_end, z_end 定义了要查询的立方体区域在网格中的起始和结束索引范围。
    • sinterp = 40 表示用于空间插值的方法。
    • tinterp = 0 表示没有时间插值。
  2. for p in range(result.shape[0])::

    • 遍历 result 数组的每个数据点。result 中的每个元素对应一个满足阈值条件的点。
  3. print(...):

    • 打印每个满足条件的点的索引和涡量值。
    • i_x, i_y, i_z 表示该点在网格中的索引位置。
    • value 表示该点的涡量值。

解释用途

  • 寻找高涡量区域:此方法有助于在流场中定位具有强旋转运动(高涡量)的区域,这些区域通常与湍流结构相关联,如涡核或强旋涡。
  • 研究湍流结构:提取和分析高涡量点可以帮助研究人员更好地理解湍流的特征,如旋涡生成和消散的机制。
  • 举例说明

    假设你在一个流动实验中想找到所有具有较高旋转速率的点,比如模拟中能量较集中的旋涡结构,这段代码会帮你在指定的立方体区域内找到涡量大于等于 65 的点,并返回这些点的网格位置和涡量值。

start = tt.time()
result = lTDB.getCutout(
    data_set = 'channel',
    field='u',
    time_step=int(1),
    start = np.array([1, 1, 1], dtype = int),
    end  = np.array([512, 512, 1], dtype = int),
    step  = np.array([1, 1, 1], dtype = int),
    filter_width = 1)
#print(result)
end = tt.time()
print(end - start)

 (这里使用 np.array([512, 512, 1],服务器会崩,不知道为什么,100都不行???问题已解决:由于token用的测试token(只能提取小切片),需要主动申请一个token

这段代码的作用是从指定的湍流数据集中提取特定区域的速度场数据(field='u' 表示获取速度场的 u 分量)。下面是详细的逐句分析和解释:

逐句分析

  1. start = tt.time():

    • 记录当前时间戳,以测量获取数据所需的时间。
  2. result = lTDB.getCutout(...):

    • 使用 getCutout 方法从 channel 数据集中提取指定的切片数据。
    • 参数说明:
      • data_set = 'channel':指定从通道湍流数据集中获取数据。
      • field='u':选择提取的场为速度的 uuu 分量(通常代表流动的 x 方向分量)。
      • time_step=int(1):选择时间步为 1。
      • start = np.array([1, 1, 1], dtype = int):起始位置,表示从网格中的第一个点(x=1, y=1, z=1)开始。
      • end = np.array([512, 512, 1], dtype = int):结束位置,表示在 x 和 y 方向扩展到 512,z 方向只取一个平面。
      • step = np.array([1, 1, 1], dtype = int):步长为 1,意味着在每个方向上提取连续数据点。
      • filter_width = 1:表示用于数据提取的过滤器宽度。
  3. #print(result):

    • 这行被注释掉了,通常用于查看结果数组的内容。可以取消注释以调试或查看数据提取结果。
  4. end = tt.time():

    • 记录数据提取完成后的时间戳。
  5. print(end - start):

    • 打印提取数据所花费的总时间,以秒为单位。这有助于评估从数据库提取数据的效率。

解释用途

这段代码旨在从湍流数据库中提取一个平面切片的数据(在 z=1 位置上、整个 x 和 y 平面的 uuu 分量)。提取这样的切片数据可以用于可视化流场的某一层,或者进一步的流动分析,例如涡结构检测或速度分布研究。

示例用途

例如,你想观察湍流通道中某一个特定平面上的速度分布,或者进行二维的流动分析(如流线图或速度图),这段代码会帮助你快速提取所需的数据切片进行分析。

print(result.shape)
fig = plt.figure(figsize = (20, 40))
a = fig.add_subplot(121)
#a.set_axis_off()
a.imshow(result[0,:,:,0],
         extent = [0, 3.14, 0, 2],
         interpolation = 'none')

dc30f3783ab046528aa8224f99fe923f.png

x, t = lTDB.getPosition(
    starttime = 0.1,
    endtime = 0.2,
    dt = 0.01,
    data_set = 'channel',
    point_coords = points[0:1,:],
    steps_to_keep = 10)
print(x)

这段代码的作用是可视化从湍流数据库中提取的速度场数据。下面是逐句分析和解释:

逐句分析

  1. print(result.shape):

    • 打印提取结果 result 的形状,用于确认数据的维度和大小。输出的形状会告诉你数据在 x、y、z方向上的采样点数及其结构。
  2. fig = plt.figure(figsize = (20, 40)):

    • 创建一个 Matplotlib 图形对象 fig,设置图形的大小为 20 × 40 英寸。较大的尺寸通常用于高分辨率的显示或打印。
  3. a = fig.add_subplot(121):

    • 添加一个子图 a 到图形 fig 中。121 表示图像布局为 1 行 2 列,并选择第 1 个子图。
  4. a.imshow(result[0,:,:,0], extent = [0, 3.14, 0, 2], interpolation = 'none'):

    • 使用 imshow 方法在子图 a 上显示数据切片。
      • result[0,:,:,0]:提取 result 中 z=1 处的 uuu 分量(整个 x 和 y 平面上的数据)。
      • extent = [0, 3.14, 0, 2]:指定显示范围,将 x 轴范围映射到 [0, 3.14],y 轴范围映射到 [0, 2]。这些值通常根据实际物理空间进行映射。
      • interpolation = 'none':不进行插值,直接显示原始数据点。
x, t = lTDB.getPosition(
    starttime = 0.1,
    endtime = 0.2,
    dt = 0.01,
    data_set = 'channel',
    point_coords = points[0:1,:],
    steps_to_keep = 10)
print(x)

这段代码使用了 lTDB.getPosition() 方法来追踪流体中的点随时间的移动,具体解释如下:

逐句分析

  1. x, t = lTDB.getPosition(...):

    • 调用 getPosition 方法来获取指定点在流场中随着时间演化的位置轨迹。
    • 返回值 x 是一个包含点在各个时间步的空间坐标的数组,t 是对应的时间步数组。
  2. starttime = 0.1, endtime = 0.2:

    • starttimeendtime 指定了位置追踪的时间范围,从 0.1 到 0.2(时间的单位取决于数据集的定义,如秒或无量纲时间)。
  3. dt = 0.01:

    • 设置每个时间步长为 0.01,这表示在 starttimeendtime 之间,每隔 0.01 个时间单位计算一次点的位置。
  4. data_set = 'channel':

    • 表示使用的流场数据集是 'channel'。
  5. point_coords = points[0:1,:]:

    • 选择 points 数组中的第一个点(points[0])作为起始位置进行追踪。[0:1, :] 表示只取第一个点的全部坐标(x, y, z)。
  6. steps_to_keep = 10:

    • 指定保存每隔多少个时间步的数据。例如,这个值为 10 表示程序会在 10 个计算步长中取 1 个位置来保存。
  7. print(x):

    • 打印 x,输出每个时间步中点的位置坐标。

代码用途

这段代码用于研究单个流体点在指定时间区间内的运动轨迹。输出的 x 是一个包含各个时间步位置坐标的数组,帮助研究人员了解在流场中点的移动情况。

t1 = np.linspace(0, 4*3.14, 256)
t2 = np.linspace(-1, 1, 256)
x = np.zeros((t1.shape[0], t2.shape[0], 3), np.float32)
x[:, :, 0] = t1[np.newaxis, :]
x[:, :, 1] = t2[:, np.newaxis]
x[:, :, 2] = .0
T = pyJHTDB.dbinfo.channel5200['time'][-1]
time = np.random.random()*T
u = lTDB.getData(
               time,
               x,
               data_set = 'channel5200',
               sinterp = 4,
               getFunction='getVelocity')
print(u.shape)
fig = plt.figure(figsize = (t1[-1] - t1[0], t2[-1] - t2[0]))
a = fig.add_subplot(121)
a.set_axis_off()
a.imshow(u[:,:,0],
         extent = [t1[0], t1[-1] - t1[0], t2[0], t2[-1] - t2[0]],
         interpolation = 'none')

54bf32c332eb4d278d85f0e0e75f4de0.png

65ab17e47b4c43a1aaaafcee28c48131.png

18a00930cc5b4ead8ae6c1576ee1a038.png

84aa6979b6bd4255affe3d39d62507fb.png 最后

lTDB.finalize() 
##是用于释放资源、关闭与数据服务器的连接或清理与 lTDB(如 PyJHTDB 类库)相关的会话的命令。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2249863.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据分析:彩票中奖号码分析与预测

预测双色球彩票的中奖号码是一个典型的随机事件,因为每个号码的出现概率是独立的,且历史数据并不能直接用于预测未来的开奖结果。然而,我们可以通过统计分析来了解号码的分布规律,从而提供一些可能的参考。 样例数据【点击下载】…

详细分析 npm run build 基本知识 | 不同环境不同命令

目录 前言1. 基本知识2. 构建逻辑 前言 关于部署服务器的知识推荐阅读:npm run build部署到云服务器中的Nginx(图文配置) 1. 基本知识 npm run 是 npm 的一个命令,用于运行 package.json 中定义的脚本,可以通过 “s…

Jpype调用jar包

需求描述 ​   公司要求使用python对接口做自动化测试,接口的实现是Java,部分接口需要做加解密,因此需要使用python来调用jar包来将明文加密成密文,然后通过http请求访问接口进行测试。 如何实现 1.安装Jpype ​   首先我…

Realtek网卡MAC刷新工具PG8168.exe Version:2.34.0.4使用说明

本刷新工具虽然文件名叫PG8168.EXE,但不是只有RTL8168可用,是这一个系列的产品都可以使用。实验证明RTL8111也可以使用。 用法: PG8168 [/h][/?][/b][/c HexOffsetHexValue][/d NICNumber][/l][/r][/w][/v] [/# NICNumber] [/nodeidHexNOD…

【Unity】Unity编辑器扩展,替代预制体上重复拖拽赋值

今天做游戏时有个需求,游戏中需要给不同年份不同月份的奖牌制定不一样的非规则形状,其中形状为100个像素组成的不同图形,并且按照从1-100路径一个个解锁,所以需要全部手动放置。但是手动放置好后,发现再一个个挂到脚本…

c语言的qsort函数理解与使用

介绍:qsort 函数是 C 标准库中用于排序的快速排序算法函数。它的用法非常灵活,可以对任意类型的元素进行排序,只要提供了比较函数即可。 qsort 函数原型及参数解释: void qsort ( void* base, //指向要排序的数组的首元素…

【力扣】125. 验证回文串

问题描述 思路详情 本题目的重点是对java中字符串的各种API用法的掌握理解 1.首先只保留字母和数字 1.1可以使用正则表达式1.2 Character.isLetterOrDight(ch) ,但是这个只能单个字符判断2.将大写字母全部小写3.验证是否为回文串 代码 通过正则表达式 &#xff…

JavaEE---计算机是如何工作的?

1.了解冯诺依曼体系结构 2.CPU的核心概念,CPU的两个重要指标(核心数和频率) 3.CPU执行指令的流程(指令表,一条一条指令,取指令,解析指令,执行指令) 4.操作系统核心概念(管理硬件,给软件提供稳定的运行环境) 5.进程的概念(运行起来的程序和可执行文件的区别) 6.进程的管理(…

gitee:创建仓库,存入本地文件至仓库

一、git下载 git:下载与安装-CSDN博客https://blog.csdn.net/weixin_46001736/article/details/144107485?sharetypeblogdetail&sharerId144107485&sharereferPC&sharesourceweixin_46001736&spm1011.2480.3001.8118 二、创建仓库 1、主页面->右上角新增…

Flink 安装与入门:开启流式计算新时代

在当今大数据蓬勃发展的时代,数据处理的时效性愈发关键。传统基于先存储再批量处理的数据方式,在面对诸如网站实时监控、异常日志即时分析等场景时,显得力不从心。随着 5G、物联网等技术的兴起,海量数据如潮水般涌来,且…

使用 Jina Embeddings v2 在 Elasticsearch 中进行后期分块

作者:来自 Elastic Gustavo Llermaly 在 Elasticsearch 中使用 Jina Embeddings v2 模型并探索长上下文嵌入模型的优缺点。 在本文中,我们将配置和使用 jina-embeddings-v2,这是第一个开源 8K 上下文长度嵌入模型,首先使用 semant…

XTuner 微调个人小助手认知 -- 书生大模型实训营第4期基础岛第五关

目录 基础任务 任务要求 算力要求 环境配置与数据准备 使用 conda 先构建一个 Python-3.10 的虚拟环境 安装 XTuner 验证安装 修改提供的数据 创建一个新的文件夹用于存储微调数据 ​编辑 创建修改脚本 执行脚本 查看数据 训练启动 复制模型 修改 Config 启动…

使用vcpkg自动链接tinyxml2时莫名链接其他库(例如boost)

使用vcpkg自动链接tinyxml2时莫名链接其他库(例如boost) vcpkg的自动链接功能非常方便,但在某些情况下会出现过度链接的问题。 链接错误症状 以tinyxml2为例,程序中调用tinyxml2的函数后,若vcpkg中同时存在opencv和…

06_数据类型

数据类型 数据类型分类 JavaScript 语言的每一个值,都属于某一种数据类型。JavaScript 的数据类型,共有六种。(ES6 又新增了第七种 Symbol 类型的值和第八种 BigInt类型,当前课程暂不涉及) 据类型分类 原始类型(基础类型) var age = 20, var name = 尚学堂"; var le…

GitLab 使用过程中常见问题及解决方案

开发人员常见问题及解决方案 合并请求被拒绝 原因:代码质量问题、安全漏洞或流水线失败。解决方案: 使用 Code Quality 工具检查代码质量。查看流水线日志,修复单元测试、编译错误或扫描问题。优化静态分析(SAST)结果&…

网络空间安全之一个WH的超前沿全栈技术深入学习之路(13-2)白帽必经之路——如何用Metasploit 渗透到她的心才不会让我释怀

欢迎各位彦祖与热巴畅游本人专栏与博客 你的三连是我最大的动力 以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现] 专栏跑道一 ➡️网络空间安全——全栈前沿技术持续深入学习 专栏跑道二 ➡️ 24 Network Security -LJS ​ ​ ​ 专栏跑道三 ➡️ MYSQL REDIS Advan…

机器学习6_支持向量机_算法流程

最大化: 限制条件: (1) (2) 如何求解这个对偶问题,同时基于对偶问题给出支持向量机算法的统一流程。 (核函数) 只要知道核函数,就可以求个这个最优化的对偶问题。 求解了这个对偶…

DM8 Docker环境部署

1 环境说明 类别 版本 介质 操作系统 CentOS-7-x86_64-DVD-2207-02.iso docker-27.3.1.tgz Dm8 Docker DM8开发版 dm8_20241119_x86_rh6_64_rq_ent_8.1.2.84.tar 备注: 下载docker源码包 下载地址: https://download.docker.com/linux/static/stable/x…

DevOps工程技术价值流:Jenkins驱动的持续集成与交付实践

一、Jenkins系统概述 Jenkins:开源CI/CD引擎的佼佼者 Jenkins,作为一款基于Java的开源持续集成(CI)与持续交付(CD)系统,凭借其强大的插件生态系统,成为DevOps实践中不可或缺的核心…

apache实现绑定多个虚拟主机访问服务

1个网卡绑定多个ip的命令 ip address add 192.168.45.140/24 dev ens33 ip address add 192.168.45.141/24 dev ens33 在linux服务器上,添加多个站点资料,递归创建三个文件目录 分别在三个文件夹下,建立测试页面 修改apache的配置文件http.…