第N1周:one-hot编码案例

  •        🍨 本文为🔗365天深度学习训练营中的学习记录博客
  •        🍖 原作者:K同学啊

一、one-hot编码概念

自然语言处理(NLP)中的文本数字化:文字对于计算机来说就仅仅只是一个个符号,计算机无法理解其中含义,更无法处理。因此,NLP第一步就是将文本数字化。

文本数字化方法:NLP中最早期的文本数字化方法,就是将文本转换为字典序列。如:“阿”是新华字典中第1个单词所以它的字典序列就是1。

 one-hot编码(独热编码):将每个类别映射到一个向量,其中只有一个元素的值为1,其余元素的值为0。这样,每个类别之间就是相互独立的,不存在顺序或距离关系。例如,对于三个类别的情况,可以使用如下的one-hot编码:

  • 类别1:[1,0,0]
  • 类别2:[0,1,0]
  • 类别3:[0,0,1]

举例:

  • John likes to watch movies.  Mary likes too.
  • John also likes to watch football games.

以上两句构成一个词典:

{"John": 1, "likes": 2, "to": 3, "watch": 4,"movies": 5, "also": 6, "football": 7, "games": 8, "Mary": 9"too": 10}

one-hot可表示为:

John:[1,0,0,0,0,0,0,0,0,0]

likes:[0,1,0,0,0,0,0,0,0,0]
............等等,以此类推。

1.one-hot编码的优点:

解决了分类器不好处理离散数据的问题,能够处理非连续型数值特征。

2.one-hot编码的缺点:
  • 在文本表征表示上有些缺点非常突出,首先one-hot 编码是一个词袋模型,是不考虑词和词之间的顺序问题,它是假设词和词之间是相互独立的,但是在大部分情况下词和词之间是相互影响的。
  • one-hot编码得到的特征是离散稀疏的,每个单词的one-hot编码维度是整个词汇表的大小,维度非常巨大,编码稀疏,会使得计算代价变大。

二、英文案例

import torch
import torch.nn.functional as F#示例文本
texts = ['Hello, how are you?','I am doing well, thank you!','Goodbye.']# 构建词汇表
word_index={}
index_word={}
for i,word in enumerate(set(" ".join(texts).split())):word_index[word]=iindex_word[i]= word#将文本转化为整数序列
sequences = [[word_index[word] for word in text.split()] for text in texts]#获取词汇表大小
vocab_size =len(word_index)#将整数序列转化为one-hot编码
one_hot_results = torch.zeros(len(texts),vocab_size)
for i,seq in enumerate(sequences):one_hot_results[i, seq] = 1#打印结果
print("词汇表:")
print(word_index)
print("\n文本:")
print(texts)
print("\n文本序列:")
print(sequences)
print("\none-Hot编码:")
print(one_hot_results)

词汇表:
{'are': 0, 'thank': 1, 'am': 2, 'you!': 3, 'you?': 4, 'Hello,': 5, 'doing': 6, 'Goodbye.': 7, 'well,': 8, 'I': 9, 'how': 10}

文本:
['Hello, how are you?', 'I am doing well, thank you!', 'Goodbye.']

文本序列:
[[5, 10, 0, 4], [9, 2, 6, 8, 1, 3], [7]]

one-Hot编码:
tensor([[1., 0., 0., 0., 1., 1., 0., 0., 0., 0., 1.],
        [0., 1., 1., 1., 0., 0., 1., 0., 1., 1., 0.],
        [0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0.]])

三、中文案例

1.以字为基本单位
import torch
import torch.nn.functional as F#示例中文文本
texts =['你好,最近怎么样?', '我过得很好,谢谢!', 'K同学啊']#构建词汇表
word_index={}
index_word ={}
for i,word in enumerate(set("".join(texts))):word_index[word]=iindex_word[i]= word#将文本转化为整数序列
sequences =[[word_index[word] for word in text] for text in texts]#获取词汇表大小
vocab_size = len(word_index)#将整数序列转化为one-hot编码
one_hot_results =torch.zeros(len(texts),vocab_size)
for i,seq in enumerate(sequences):one_hot_results[i,seq]=1#打印结果
print("词汇表:")
print(word_index)
print("\n文本:")
print(texts)
print("\n文本序列:")
print(sequences)
print("\none-Hot编码:")
print(one_hot_results)

词汇表:
{'?': 0, '同': 1, '样': 2, '得': 3, '你': 4, '啊': 5, ',': 6, '好': 7, '很': 8, 'K': 9, '我': 10, '近': 11, '学': 12, '谢': 13, '怎': 14, '最': 15, '么': 16, '过': 17, '!': 18}

文本:
['你好,最近怎么样?', '我过得很好,谢谢!', 'K同学啊']

文本序列:
[[4, 7, 6, 15, 11, 14, 16, 2, 0], [10, 17, 3, 8, 7, 6, 13, 13, 18], [9, 1, 12, 5]]

one-Hot编码:
tensor([[1., 0., 1., 0., 1., 0., 1., 1., 0., 0., 0., 1., 0., 0., 1., 1., 1., 0.,
         0.],
        [0., 0., 0., 1., 0., 0., 1., 1., 1., 0., 1., 0., 0., 1., 0., 0., 0., 1.,
         1.],
        [0., 1., 0., 0., 0., 1., 0., 0., 0., 1., 0., 0., 1., 0., 0., 0., 0., 0.,
         0.]])

2.使用结巴分词工具
import torch
import torch.nn.functional as F 
import jieba#示例中文文本
texts = ['你好,最近怎么样?', '我过得很好,谢谢!', '再见。']#使用结巴分词进行分词
tokenized_texts = [list(jieba.cut(text)) for text in texts]#构建词汇表
word_index = {}
index_word = {}
for i,word in enumerate(set([word for text in tokenized_texts for word in text])):word_index[word] = iindex_word[i] = word#将文本转化为整数序列
sequences =[[word_index[word] for word in text] for text in tokenized_texts]#获取词汇表大小
vocab_size =len(word_index)#将整数序列转化为one-hot编码
one_hot_results = torch.zeros(len(texts),vocab_size)
for i,seq in enumerate(sequences):one_hot_results[i,seq]=1#打印结果
print("词汇表:")
print(word_index)
print("\n文本:")
print(texts)
print("\n分词结果")
print(tokenized_texts)
print("\n文本序列:")
print(sequences)
print("\none-Hot编码:")
print(one_hot_results)

词汇表:
{'你好': 0, '得': 1, '再见': 2, '?': 3, '怎么样': 4, ',': 5, '最近': 6, '很': 7, '!': 8, '谢谢': 9, '。': 10, '我过': 11, '好': 12}

文本:
['你好,最近怎么样?', '我过得很好,谢谢!', '再见。']

分词结果
[['你好', ',', '最近', '怎么样', '?'], ['我过', '得', '很', '好', ',', '谢谢', '!'], ['再见', '。']]

文本序列:
[[0, 5, 6, 4, 3], [11, 1, 7, 12, 5, 9, 8], [2, 10]]

one-Hot编码:
tensor([[1., 0., 0., 1., 1., 1., 1., 0., 0., 0., 0., 0., 0.],
        [0., 1., 0., 0., 0., 1., 0., 1., 1., 1., 0., 1., 1.],
        [0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0.]])

四、任务案例

import torch
import torch.nn.functional as F 
import jieba# 定义文件路径
file_name = 'F:/jupyter lab/DL-100-days/datasets/one_hot/任务文件.txt'# 打开文件并读取内容
with open(file_name, "r", encoding="utf-8") as file:context = file.read()# 将内容分割成句子sentences = context.split()# 使用jieba对每个句子进行分词
tokenized_texts = [list(jieba.lcut(sentence)) for sentence in sentences]# 构建词汇表
word_index = {}
index_word = {}
for i, word in enumerate(set([word for text in tokenized_texts for word in text])):word_index[word] = iindex_word[i] = word# 将文本转化为整数序列
sequences = [[word_index[word] for word in text] for text in tokenized_texts]# 获取词汇表大小
vocab_size = len(word_index)# 将整数序列转化为one-hot编码
one_hot_results = torch.zeros(len(sentences), vocab_size)
for i, seq in enumerate(sequences):one_hot_results[i, seq] = 1# 打印结果
print("====词汇表:====\n", word_index)
print("====文本:====\n", sentences)
print("====分词结果:====\n", tokenized_texts)
print("====文本序列:====\n", sequences)
print("====One-Hot编码:====\n", one_hot_results)

====词汇表:====
{'训练营': 0, '实际意义': 1, '深度': 2, '顺序': 3, '模型': 4, '不同': 5, '值': 6, '的': 7, '错误': 8, '字典': 9, '距离': 10, 'one': 11, '或': 12, '是': 13, '实际上': 14, '例如': 15, '存在': 16, '2': 17, '认为': 18, '使用': 19, '这是': 20, '内容': 21, '啊': 22, '有': 23, '-': 24, '独立': 25, '就是': 26, '向量': 27, '“': 28, '情况': 29, '和': 30, '具有': 31, '问题': 32, '365': 33, '分别': 34, '为了': 35, '地': 36, '将': 37, '同学': 38, ',': 39, 'K': 40, '其余': 41, '1': 42, '之间': 43, '这种': 44, '称': 45, 'hot': 46, '如下': 47, '直观': 48, '。': 49, '用': 50, '其中': 51, '或者': 52, ')': 53, '比较': 54, '上面': 55, '为': 56, '3': 57, '可能': 58, '这些': 59, '引入': 60, '每个': 61, '相互': 62, ':': 63, '序列': 64, '编码方式': 65, '关系': 66, '、': 67, '表示': 68, '避免': 69, '不': 70, '但是': 71, '类别': 72, '也': 73, '思想': 74, '0': 75, '学习': 76, '了': 77, '这样': 78, '一个': 79, '编码': 80, '基本': 81, '元素': 82, '”': 83, '采用': 84, '三个': 85, '到': 86, '天': 87, '这': 88, '提到': 89, '而': 90, '映射': 91, '对于': 92, '教案': 93, '(': 94, '可以': 95, '只有': 96, '一些': 97, '会': 98, '独热': 99}
====文本:====
['比较直观的编码方式是采用上面提到的字典序列。', '例如,对于一个有三个类别的问题,可以用1、2和3分别表示这三个类别。', '但是,这种编码方式存在一个问题,就是模型可能会错误地认为不同类别之间存在一些顺序或距离关系', '而实际上这些关系可能是不存在的或者不具有实际意义的,为了避免这种问题,引入了one-hot编码(也称独热编码)。', 'one-hot编码的基本思想是将每个类别映射到一个向量,其中只有一个元素的值为1,其余元素的值为0。', '这样,每个类别之间就是相互独立的,不存在顺序或距离关系。', '例如,对于三个类别的情况,可以使用如下的one-hot编码:', '这是K同学啊的“365天深度学习训练营”教案内容']
====分词结果:====
[['比较', '直观', '的', '编码方式', '是', '采用', '上面', '提到', '的', '字典', '序列', '。'], ['例如', ',', '对于', '一个', '有', '三个', '类别', '的', '问题', ',', '可以', '用', '1', '、', '2', '和', '3', '分别', '表示', '这', '三个', '类别', '。'], ['但是', ',', '这种', '编码方式', '存在', '一个', '问题', ',', '就是', '模型', '可能', '会', '错误', '地', '认为', '不同', '类别', '之间', '存在', '一些', '顺序', '或', '距离', '关系'], ['而', '实际上', '这些', '关系', '可能', '是', '不', '存在', '的', '或者', '不', '具有', '实际意义', '的', ',', '为了', '避免', '这种', '问题', ',', '引入', '了', 'one', '-', 'hot', '编码', '(', '也', '称', '独热', '编码', ')', '。'], ['one', '-', 'hot', '编码', '的', '基本', '思想', '是', '将', '每个', '类别', '映射', '到', '一个', '向量', ',', '其中', '只有', '一个', '元素', '的', '值', '为', '1', ',', '其余', '元素', '的', '值', '为', '0', '。'], ['这样', ',', '每个', '类别', '之间', '就是', '相互', '独立', '的', ',', '不', '存在', '顺序', '或', '距离', '关系', '。'], ['例如', ',', '对于', '三个', '类别', '的', '情况', ',', '可以', '使用', '如下', '的', 'one', '-', 'hot', '编码', ':'], ['这是', 'K', '同学', '啊', '的', '“', '365', '天', '深度', '学习', '训练营', '”', '教案', '内容']]
====文本序列:====
[[54, 48, 7, 65, 13, 84, 55, 89, 7, 9, 64, 49], [15, 39, 92, 79, 23, 85, 72, 7, 32, 39, 95, 50, 42, 67, 17, 30, 57, 34, 68, 88, 85, 72, 49], [71, 39, 44, 65, 16, 79, 32, 39, 26, 4, 58, 98, 8, 36, 18, 5, 72, 43, 16, 97, 3, 12, 10, 66], [90, 14, 59, 66, 58, 13, 70, 16, 7, 52, 70, 31, 1, 7, 39, 35, 69, 44, 32, 39, 60, 77, 11, 24, 46, 80, 94, 73, 45, 99, 80, 53, 49], [11, 24, 46, 80, 7, 81, 74, 13, 37, 61, 72, 91, 86, 79, 27, 39, 51, 96, 79, 82, 7, 6, 56, 42, 39, 41, 82, 7, 6, 56, 75, 49], [78, 39, 61, 72, 43, 26, 62, 25, 7, 39, 70, 16, 3, 12, 10, 66, 49], [15, 39, 92, 85, 72, 7, 29, 39, 95, 19, 47, 7, 11, 24, 46, 80, 63], [20, 40, 38, 22, 7, 28, 33, 87, 2, 76, 0, 83, 93, 21]]
====One-Hot编码:====
tensor([[0., 0., 0., 0., 0., 0., 0., 1., 0., 1., 0., 0., 0., 1., 0., 0., 0., 0.,
         0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
         0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 0., 0., 0., 0.,
         1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 0., 0., 0., 0., 0., 0.,
         0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 1.,
         0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 1., 0., 1.,
         0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 1., 0., 1., 0., 1., 0.,
         0., 0., 0., 1., 0., 0., 1., 0., 0., 0., 0., 0., 0., 1., 1., 0., 0., 0.,
         0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 0., 0., 0.,
         1., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 1., 0., 0., 1., 0.,
         0., 0., 1., 0., 0., 1., 0., 0., 0., 0.],
        [0., 0., 0., 1., 1., 1., 0., 0., 1., 0., 1., 0., 1., 0., 0., 0., 1., 0.,
         1., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 1., 0., 0., 0.,
         1., 0., 0., 1., 0., 0., 0., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
         0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 1., 1., 0., 0., 0., 0., 1.,
         1., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
         0., 0., 0., 0., 0., 0., 0., 1., 1., 0.],
        [0., 1., 0., 0., 0., 0., 0., 1., 0., 0., 0., 1., 0., 1., 1., 0., 1., 0.,
         0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 1., 1., 0., 0., 1.,
         0., 0., 0., 1., 0., 0., 0., 0., 1., 1., 1., 0., 0., 1., 0., 0., 1., 1.,
         0., 0., 0., 0., 1., 1., 1., 0., 0., 0., 0., 0., 1., 0., 0., 1., 1., 0.,
         0., 1., 0., 0., 0., 1., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
         1., 0., 0., 0., 1., 0., 0., 0., 0., 1.],
        [0., 0., 0., 0., 0., 0., 1., 1., 0., 0., 0., 1., 0., 1., 0., 0., 0., 0.,
         0., 0., 0., 0., 0., 0., 1., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.,
         0., 1., 0., 1., 0., 1., 1., 0., 0., 0., 1., 0., 0., 1., 0., 1., 0., 0.,
         0., 0., 1., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
         1., 0., 1., 1., 0., 0., 0., 1., 1., 1., 1., 0., 0., 0., 1., 0., 0., 0.,
         0., 1., 0., 0., 0., 0., 1., 0., 0., 0.],
        [0., 0., 0., 1., 0., 0., 0., 1., 0., 0., 1., 0., 1., 0., 0., 0., 1., 0.,
         0., 0., 0., 0., 0., 0., 0., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
         0., 0., 0., 1., 0., 0., 0., 1., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.,
         0., 0., 0., 0., 0., 0., 0., 1., 1., 0., 0., 0., 1., 0., 0., 0., 1., 0.,
         1., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
         0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 1., 0., 0., 0., 1., 0., 0.,
         0., 1., 0., 0., 0., 0., 1., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.,
         0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 1., 1., 0., 0., 0., 0., 0., 0.,
         0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.,
         1., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 1., 0., 0., 0., 0.,
         0., 0., 1., 0., 0., 1., 0., 0., 0., 0.],
        [1., 0., 1., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
         0., 0., 1., 1., 1., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 1., 0., 0.,
         0., 0., 1., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
         0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
         0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 1., 0., 0.,
         0., 0., 0., 1., 0., 0., 0., 0., 0., 0.]])

五、学习心得

1.学习了one-hot编码并将其应用于英文案例和中文案例中。在英文案例中,能够识别独立的单词并自动进行分词。而在中文案例中,不能自动识别,而是一个字。借助结巴分词工具可以很好地分割一句话中的词语。

2.掌握了构建词汇表及其在文本向量化中的作用。在进行One-Hot编码之前,需要先构建一个完整的词汇表,将每个唯一的词分配一个唯一的索引。

3.虽然One-Hot编码实现简单,但随着词汇量增大,其向量维度会急剧增加,且不同词之间的语义关系无法体现。

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

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

相关文章

Linux 云服务器部署 Flask 项目(含后台运行与 systemd 开机自启)

一、准备工作 在开始正式部署之前,请确认以下前提条件已经准备好: 你有一台运行 Linux 系统(CentOS 或 Ubuntu)的服务器; 服务器有公网 IP,本例中使用:111.229.204.102; 你拥有该服务器的管理员权限(可以使用 sudo); 打算使用 Flask 构建一个简单的 Web 接口; 服务…

散货拼柜业务:多货主财务结算如何高效管理?

散货拼柜业务满足了小批量发货客户的需求,由于无法满足海运整柜的条件,其模式通常涉及多个货主共同分摊同一集装箱的运输项目。这种业务模型虽然在成本上具备优势,但其复杂的财务结算过程往往给公司带来了挑战。 散货拼柜业务的特点在于其小…

数据结构(7)—— 二叉树(1)

目录 前言 一、 树概念及结构 1.1树的概念 1.2树的相关概念 1.3数的表示 1.二叉树表示 2.孩子兄弟表示法 3.动态数组存储 1.4树的实际应用 二、二叉树概念及结构 2.1概念 2.2特殊的二叉树 1.满二叉树 2. 完全二叉树 2.3二叉树的性质 2.4二叉树的存储结构 1.顺序存储 2.链式存储…

SpringBoot+Vue+微信小程序校园自助打印系统

概述​​ 校园自助打印系统是现代化校园建设中不可或缺的一部分,基于SpringBootVue微信小程序开发的​​免费Java源码​​项目,包含完整的用户预约、打印店管理等功能模块。 ​​主要内容​​ ​​ 系统功能模块​​ ​​登录验证模块​​:…

使用 useSearchParams 的一个没有触发控制台报错的错误用法

const searchParams useSearchParams(); // navigate(/?${searchParams.toString()});//带过去的参数会把函数方法也带过去 正确写法应该是用[]解构 使用了数组解构(destructuring)来提取 useSearchParams 返回的数组中的第一个值 const [searchPara…

Blender的一些设置

1. 将Blender长度单位改为毫米(mm), 并设置guides Grid的缩放系数,避免网格不见了。 2. 布尔操作的(Apply)应用按钮在哪里?好吧,在这里: 可以按下 CTRL A 快捷键。 3. 模型的 移动、旋转、缩放快捷键: G,R&#xff0…

Inno Setup 脚本中常用术语释义

1、目录常量 {app} 应用程序所在的目录。 {win} 系统的 Windows 目录, “C:/WINDOWS”。 {sys} 系统的 Windows 系统(System)目录,“C:/WINDOWS/SYSTEM”。 {src} 这个文件夹指向安装程序所在的位置。 {pf} 程序…

【java面试】MySQL篇

MySQL篇 一、总体结构二、优化(一)定位慢查询1.1 开源工具1.2Mysql自带的慢日志查询1.3 总结 (二)定位后优化2.1 优化2.2 总结 (三)索引3.1 索引3.2 索引底层数据结构——B树3.3 总结 (四&#…

drawio 开源免费的流程图绘制

开源地址 docker-compose 一键启动 #This compose file adds draw.io to your stack version: 3.5 services:drawio:image: jgraph/drawiocontainer_name: drawiorestart: unless-stoppedports:- 8081:8080- 8443:8443environment:PUBLIC_DNS: domainORGANISATION_UNIT: unitOR…

江科大睡眠,停止,待机模式hal库实现

修改主频我们直接在cubeMx上面修改就行了,很方便 睡眠,停止,待机模式是通过对电源的控制来进行的,相关代码在PWR文件里面 SEV(Send Event) void HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SL…

【黄金评论】美元走强压制金价:基于NLP政策因子与ARIMA-GARCH的联动效应解析

一、基本面:多因子模型解析黄金承压逻辑 1. 政策冲击因子驱动美元强势 通过NLP模型对关税政策文本进行情感分析,构建政策不确定性指数(PUI)达89.3,触发美元避险需求溢价。DSGE模型模拟显示,钢铁关税上调至…

蓝桥云课ROS一键配置teb教程更新-250604

一键配置 echo "250604已经更新不动了"git clone https://gitcode.com/ZhangRelay1/donut.gitsudo apt-key add ~/donut/ros.keysudo apt updateecho "Upgrade Mission Completed."echo "Teb Mission Begins."sudo apt install ros-kinetic-sta…

OD 算法题 B卷【服务启动】

文章目录 服务启动 服务启动 有若干连续编号的服务(编号从0开始),服务间有依赖关系,启动一个指定的服务,请判断该服务是否可以成功启动,并输出依赖的前置服务编号;依赖关系是可以传递的&#x…

StarRocks与Apache Iceberg:构建高效湖仓一体的实时分析平台

## 引言:数据湖的挑战与演进 在数据驱动的时代,企业数据湖需要同时满足海量存储、高性能查询、多引擎协作和实时更新等复杂需求。传统基于 Hive 的数据湖方案面临元数据管理低效、缺乏 ACID 事务支持、查询性能瓶颈等问题。在此背景下,**Sta…

Kafka 单机部署启动教程(适用于 Spark + Hadoop 环境)

🧭 Kafka 单机部署启动教程(适用于 Spark Hadoop 环境) 📦 一、Kafka 版本选择 推荐使用 Kafka 2.13-2.8.1(Scala 2.13,稳定适配 Spark 3.1.2 和 Hadoop 3.1.1) 下载地址(Apache 官…

C语言数组初始化方法大全(附带实例)

在 C语言中,数组用于存储相同类型的多个元素。数组的初始化是一个重要的概念,它允许我们在声明数组的同时为其赋初值。 这篇文章,我将为大家详细介绍 C语言中初始化数组的多种方法,以及一些需要注意的细节。 数组初始化的基本语…

RAMSUN分享全新超值型MM32F0050系列MCU

凭借全国产化的供应链优势和可靠的国产高端工艺制程,灵动微再次推出全新超值型MM32F0050系列微控制器单元(MCU),将超值型MCU推向新的高度。 MM32F0050系列MCU配备了72MHz的Arm Cortex-M0内核,提供64KB的Flash存储和8K…

CMS32M65xx/67xx系列CoreMark跑分测试

CMS32M65xx/67xx系列CoreMark跑分测试 1、参考资料准备 1.1、STM32官方跑分链接 1.2、官网链接 官方移植文档,如下所示,点击红框处-移植文档: A new whitepaper and video explain how to port CoreMark-Pro to bare-metal 1.3、测试软件git下载链接 …

LeetCode 139. 单词拆分(Word Break) - 动态规划深度解析

文章目录 问题描述动态规划解法解法核心思路完整代码实现关键代码解析1. 数据结构初始化2. 动态规划数组3. 核心循环逻辑4. 子串区间理解(关键)示例演算复杂度分析算法优化点总结本文详细解析LeetCode 139题"单词拆分"的动态规划解法,涵盖核心思路、代码实现、区间…

获客方式有哪些拓展方向?

品牌在面临增长瓶颈时,如何拓展获客方式会是一个首要考虑的问题。有些时候企业会将获客渠道想得很复杂,其实仔细数下来,我们可以拓展的方向仍旧是根据渠道来溯源,因此相对固定。 一、跟随流行趋势 在数字营销领域,紧跟…