【艺术之道】一次性看懂for,foreach和map数组、map向量的用法

/*初级篇:简单数组中for和foreach的用法*/
	int nums[3] = { 0, 1, 2 };
	for (int num : nums)
	{
		cout << num << ",";
	}
	for each (int num  in nums)
	{
		cout << num << ",";
	}
	cout << endl;
	//输出为:0,1,2,0,1,2,

分割线///

	/*高级篇:map数组中for和foreach的用法*/
	map<string, string> mapp[3];
	mapp[0]["a0"] = "b0";
	mapp[1]["a1"] = "b1";
	mapp[2]["a1"] = "b2";
	for (map<string, string> num : mapp)
	{
		cout << num["a1"]<<",";
	}
	for each (map<string, string> num  in mapp)
	{
		cout << num["a1"]<< ",";
	}
	cout << endl;
	//输出为:,b1,b2,,b1,b2,

	分割线///

	/*初级篇:简单向量中for和foreach的用法*/
	/*vector相当于动态数组,在不知道数组长度情况下使用*/
	vector<int>vs = { 0, 1, 2, 3, 4 };
	for (int v : vs)
	{
		cout << v << ",";
	}
	for each (int v  in vs)
	{
		cout << v << ",";
	}
	cout << endl;
	//输出为:0,1,2,3,4,0,1,2,3,4,

	分割线///

	/*高级篇:封装map向量中for和foreach的用法*/
	vector<map<string, string>>vec;
	map<string, string> map1,map2;
	map1["a"] = "a1";
	map2["a"] = "a2";
	vec.push_back(map1);
	vec.push_back(map2);
	for (map<string, string> num : vec)
	{
		cout << num["a"] << ",";
	}
	for each (map<string, string> num  in vec)
	{
		cout << num["a"] << ",";
	}
	cout << endl;
	//输出为:a1,a2,a1,a2,


这个好例子对map的理解就差不多够用了,另外再附上博友详细的map用法讲解,以备学习。

最全的C++map的用法

c++中vector的用法详解

下面是使用Spark MLlib计算三维向量余弦相似性的代码: ```scala import org.apache.spark.ml.feature.Word2Vec import org.apache.spark.ml.linalg.{Vector, Vectors} import org.apache.spark.sql.{Row, SparkSession} // 创建SparkSession val spark = SparkSession.builder() .appName("Cosine Similarity Calculation") .master("local[*]") .getOrCreate() // 创建数据集 val data = Seq( Row(1, Vectors.dense(0.1, 0.2, 0.5)), Row(2, Vectors.dense(0.2, 0.4, 0.6)), Row(3, Vectors.dense(0.3, 0.6, 0.7)) ) val schema = List( ("id", IntegerType, true), ("vector", VectorType, true) ) val df = spark.createDataFrame( spark.sparkContext.parallelize(data), StructType(schema) ) // 计算余弦相似度 val vectorRdd = df.select("vector").rdd.map { case Row(v: Vector) => v } val similarities = vectorRdd.cartesian(vectorRdd).map { case (v1, v2) => (v1, v2, v1.dot(v2) / (v1.norm(2) * v2.norm(2))) } // 打印结果 similarities.foreach { case (v1, v2, sim) => println(s"Similarity between $v1 and $v2 is $sim") } ``` 在上面的代码中,我们首先创建了一个包含三个三维向量的数据集,并创建了一个DataFrame。然后,我们使用DataFrame中的向量创建一个RDD,对RDD进行cartesian计算,从而得到所有向量之间的余弦相似度。最后,我们打印了结果。 需要注意的是,本示例中使用的是Spark的MLlib库,而不是Spark SQL的ML库。如果您使用的是Spark SQL的ML库,则需要使用VectorAssembler将向量拼接为一个特征向量,然后使用StandardScaler对特征向量进行标准化,最后使用SimilarityJoiner计算余弦相似度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值