Map深度学习

Map

Map是一个键值对的集合,和object类似,Map作为构造函数,可以通过全局对象获取到。需要通过new操作创建实例对象,直接调用会报错。Map构造函数接受一个iterable类型的函数,用来初始化Map。

      var m = new Map([
        [1, "1"],
        ["hello", "world"],
      ]);
      console.log(m);
      var n = Map();
      console.log(n);

在这里插入图片描述

和Object的区别

1.object的key只能是字符串类型和symbol类型,Map的key可以是任意javascript类型
2.Map的key是有序的,迭代时按照插入key的顺序,object的key是无序的,es6以后,object的key也有序的了
3.在频繁的增删键值对的情况下,Map的表现更好,object没有做优化

Map对象的属性

size:用来获取Map中的条目数量
Map对象的方法
clear:清空对象中的条目
delete:删除特定的条目
get:获取特定的条目
has:检测是否包含特定的条目
set:设置特定的条目,如果已经包含,就更形该条目

迭代Map对象

entries(): 返回包含[key,value]的迭代器
keys():返回包含key的迭代器
values(): 返回包含value的迭代器
forEach():传入迭代处理函数遍历所有条目
for…of循环:和entires()的函数表现类似,循环内部对迭代器做了处理

注意:
迭代Map对象的过程中,新增的键值对可以被访问到,已经访问过的键值对,删除后再次添加进来的,会被再次访问,删除没有访问过的键值对,将不会被访问到。

set vs Array/Map vs Object性能对比

var m = new Map([
        [1, "1"],
        ["hello", "world"],
      ]);
      console.log(m);

      let map = new Map();
      //   存储对象,相同键值对可以去重
      map.set(1, "1");
      map.set(1, "2");
      map.set(2, "3");
      map.set("x", "6");
      console.log(map);

      console.log(map.get(1), map.get(2));

      map.delete(1);

      console.log(map.has(1));

      //   遍历
      for (let entries of map) {
        //entries 是[k,v]数组
        console.log(entries);
      }

      //实际开发中用于Map只存在于js中,不利于数据传输,需要进行转换
      let arr = Array.from(map);
      console.log(arr);

      //转换成对象
      let obj = Object.fromEntries(map);
      console.log(obj);

      //   性能对比
      let obj2 = {};
      let map2 = new Map();

      function each(cb) {
        for (let i = 0; i < 1000000; i++) {
          cb(i + "_", i);
        }
      }

      console.time("map");
      each((key, val) => {
        map2.set(key, val);
      });
      each((key, val) => {
        map2.delete(key);
      });
      console.timeEnd("map");

      console.time("obj");
      each((key, val) => {
        obj2[key] = val;
      });
      each((key, val) => {
        delete obj2[key];
      });
      console.timeEnd("obj");

      //   数组查找快,链表增删快,Map结合数组+链表的优势实现高性能增删改查

Map实现

      let count = 8;
      function MyMap() {
        //构造器
        this.initStore();
      }

      MyMap.prototype.initStore = function () {
        this.store = new Array(count); //创建一个长度为8的数组用来存储(8个房间)
        for (let i = 0; i < this.store.length; i++) {
          this.store[i] = {
            next: null,
          };
        }
      };
      MyMap.prototype.set = function (k, v) {
        // 通过key计算余数8,取得房间号
        let roomIndex = this.hash(k);
        // 取出链表头
        let queue = this.store[roomIndex];
        // 找元素
        while (queue.next) {
          // 不断地向下找
          if (queue.next.key === k) {
            // 覆盖
            queue.next.value = v;
          } else {
            queue = queue.next;
          }
        }
        //第一次执行到这里就是第一个数据 k:1
        //第二次执行到这里就是末尾的一个
        queue.next = {
          next: null,
          key: k,
          value: v,
        };
      };
      MyMap.prototype.get = function (k) {
        // 通过key计算余数8,取得房间号
        let roomIndex = this.hash(k);
        // 取出链表头
        let queue = this.store[roomIndex];
        queue = queue.next;

        while (queue) {
          if (queue.key === k) {
            return queue.value;
          } else {
            // 指针下移
            queue = queue.next;
          }
        }
        return undefined;
      };
      MyMap.prototype.hash = function (k) {
        return k % count;
      };
      MyMap.prototype.has = function (k) {
        return this.get(k) !== undefined;
      };
      let m = new MyMap();
      m.set(1, "a");
      m.set(2, "b");
      m.set(3, "c");
      m.set(4, "d");
      m.set(5, "e");
      m.set(6, "f");
      m.set(7, "g");
      m.set(8, "h");
      m.set(9, "k");

      console.log(m);
      console.log(m.get(1), m.get(3), m.get(9));

在这里插入图片描述

mAP画图是深度学习中的一个指标,用于评估目标检测算法的性能。mAP代表平均精度均值(mean Average Precision),它是通过计算不同类别的精度-召回曲线下的面积来得到的。精度-召回曲线是在不同的召回率下计算的,召回率是指检测到的正样本与所有正样本的比例,而精度是指检测到的正样本中真正正确的比例。 在深度学习中,mAP画图通常用于比较不同模型或算法在目标检测任务上的性能。通过绘制精度-召回曲线,并计算曲线下的面积,可以得到一个综合评估指标,用于衡量模型的准确性和鲁棒性。 如果你想了解更多关于mAP画图和深度学习的内容,可以参考\[1\]中提供的链接,里面有详细的介绍和实践案例。 #### 引用[.reference_title] - *1* *3* [深度学习系列资料总结](https://blog.csdn.net/qq_36816848/article/details/125829496)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [深度学习画图工具](https://blog.csdn.net/qq_40677266/article/details/92793474)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大兵的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值