Django学习记录08——图表及文件上传案例

news2024/10/7 10:19:40

1.图表Echarts的应用

Apache ECharts

1.1 使用方法

引用echarts.js即可到官方文档中查询使用

1.2 常用图标的使用

图表展示页面的部署(主要展示折线图、柱状图、饼图)

{% block content %}
    <div class="container">
        <div class="panel panel-default">
            <div class="panel-heading">
                <h3 class="panel-title">折线图</h3>
            </div>
            <div class="panel-body">
                <div id="m1" style="width: 100%;height:500px;"></div>
            </div>
        </div>
        <div class="row">
            <div class="col-sm-8">
                <div class="panel panel-default">
                    <div class="panel-heading">
                        <h3 class="panel-title">柱状图</h3>
                    </div>
                    <div class="panel-body">
                        <div id="m2" style="width: 100%;height:400px;"></div>
                    </div>
                </div>
            </div>
            <div class="col-sm-4">
                <div class="panel panel-default">
                    <div class="panel-heading">
                        <h3 class="panel-title">饼图</h3>
                    </div>
                    <div class="panel-body">
                        <div id="m3" style="width: 100%;height:400px;"></div>
                    </div>
                </div>
            </div>
        </div>
    </div>
{% endblock %}

使用方法

var myChart = echarts.init(document.getElementById('m1')); 基于准备好的dom,初始化echarts实例 根据id获取展示的位置

option = {官方文档获取 }; 指定图表的配置项和数据

myChart.setOption(option); 使用刚指定的配置项和数据显示图表。

1.2.1 折线图

  • 官方文档代码

在这里插入图片描述

option = {
  title: {
    text: 'Stacked Line'
  },
  tooltip: {
    trigger: 'axis'
  },
  legend: {
    data: ['Email', 'Union Ads', 'Video Ads', 'Direct', 'Search Engine']
  },
  grid: {
    left: '3%',
    right: '4%',
    bottom: '3%',
    containLabel: true
  },
  toolbox: {
    feature: {
      saveAsImage: {}
    }
  },
  xAxis: {
    type: 'category',
    boundaryGap: false,
    data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
  },
  yAxis: {
    type: 'value'
  },
  series: [
    {
      name: 'Email',
      type: 'line',
      stack: 'Total',
      data: [120, 132, 101, 134, 90, 230, 210]
    },
    {
      name: 'Union Ads',
      type: 'line',
      stack: 'Total',
      data: [220, 182, 191, 234, 290, 330, 310]
    },
    {
      name: 'Video Ads',
      type: 'line',
      stack: 'Total',
      data: [150, 232, 201, 154, 190, 330, 410]
    },
    {
      name: 'Direct',
      type: 'line',
      stack: 'Total',
      data: [320, 332, 301, 334, 390, 330, 320]
    },
    {
      name: 'Search Engine',
      type: 'line',
      stack: 'Total',
      data: [820, 932, 901, 934, 1290, 1330, 1320]
    }
  ]
};
  • 使用

在html中id为m1的标签,展示折线图

    <script type="text/javascript">
        $(function () {
            initLine();
        })

        //初始化折线图
        function initLine() {
            // 基于准备好的dom,初始化echarts实例
            var myChart = echarts.init(document.getElementById('m1'));
            // 指定图表的配置项和数据
            var option = {
                title: {
                    text: '分公司上半年业绩'
                },
                tooltip: {
                    trigger: 'axis'
                },
                legend: {
                    data: [数据]
                },
                grid: {
                    left: '3%',
                    right: '4%',
                    bottom: '3%',
                    containLabel: true
                },
                toolbox: {
                    feature: {
                        saveAsImage: {}
                    }
                },
                xAxis: {
                    type: 'category',
                    boundaryGap: false,
                    data: [数据]//待后端传来的数据
                },
                yAxis: {
                    type: 'value'
                },
                series: [数据]//待后端传来的数据
            };
            //使用ajax请求从后台获取数据
            $.ajax({
                url: '/chart/line',
                type: 'get',
                dataType: 'json',
                success: function (res) {
                    //在此对图标的x轴,y轴,图例等进行赋值
                    if (res.status) {
                        //重新赋值
                        option.legend.data = res.data.legend_data;
                        option.xAxis.data = res.data.x_data;
                        option.series = res.data.series;

                        // 使用刚指定的配置项和数据显示图表。
                        myChart.setOption(option);
                    }

                }
            })

        }
    </script>
  • 基本属性

title 图表标题的相关属性

legend 图例的相关属性

xAxis x轴的相关属性

series y轴展示内容的属性

  • 数据的获取

对于option{}中各属性的数据内容可从后端的视图函数(视图函数从数据库)中获取\

使用Aajx请求获取后台数据,并传给option

chart.py视图函数

def chart_line(request):
   """构造折线图"""
   # 模拟从数据库获取数据
   legend_data = ['公司1', '公司2', '公司3', '公司4', '公司5']
   x_data = ['1月份', '2月份', '3月份', '4月份', '5月份', '6月份']
   series = [
       {
           'name': '公司1',
           'type': 'line',
           'stack': 'Total',
           'data': [120, 1322, 1201, 134, 920, 2320, 210]
       },
       {
           'name': '公司2',
           'type': 'line',
           'stack': 'Total',
           'data': [220, 1832, 191, 2324, 290, 3230, 310]
       },
       {
           'name': '公司3',
           'type': 'line',
           'stack': 'Total',
           'data': [1510, 2232, 201, 1524, 190, 330, 410]
       },
       {
           'name': '公司4',
           'type': 'line',
           'stack': 'Total',
           'data': [3230, 332, 3021, 334, 3930, 330, 320]
       },
       {
           'name': '公司5',
           'type': 'line',
           'stack': 'Total',
           'data': [820, 932, 901, 934, 1290, 1330, 1320]
       }
   ]

   data_dict = {
       'status': True,
       'data': {
           'legend_data':legend_data,
           'x_data': x_data,
           'series': series,
       }
   }
   return JsonResponse(data_dict)

以上在视图函数中模拟数据库数据传到前端中

数据传输到前端后,Ajax请求对option的各个属性进行赋值

option.legend.data = res.data.legend_data;
option.xAxis.data = res.data.x_data;
option.series = res.data.series;

1.2.2 柱状图

  • 官方文档代码

在这里插入图片描述

option = {
  xAxis: {
    type: 'category',
    data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
  },
  yAxis: {
    type: 'value'
  },
  series: [
    {
      data: [120, 200, 150, 80, 70, 110, 130],
      type: 'bar'
    }
  ]
};
  • 使用

在html中id为m2的标签,展示柱状图

    <script type="text/javascript">
        $(function () {
            initBar();
        })

        //初始化柱状图
	function initBar() {
            // 基于准备好的dom,初始化echarts实例
            var myChart = echarts.init(document.getElementById('m2'));

            // 指定图表的配置项和数据
            var option = {
                title: {
                    text: '员工业绩',
                    left: 'center',
                },
                tooltip: {},
                //图例
                legend: {
                    data: [数据],//待后端传来的数据
                    bottom: 0,
                },
                //x轴
                xAxis: {
                    data: []  //待后端传来的数据
                },
                //y轴
                yAxis: {},
                series: []  //待后端传来的数据

            };
            //使用ajax请求从后台获取数据
            $.ajax({
                url: '/chart/bar',
                type: 'get',
                dataType: 'json',
                success: function (res) {
                    //在此对图标的x轴,y轴,图例等进行赋值
                    if (res.status) {
                        //重新赋值
                        option.legend.data = res.data.legend;
                        option.xAxis.data = res.data.x_data;
                        option.series = res.data.series;

                        // 使用刚指定的配置项和数据显示图表。
                        myChart.setOption(option);
                    }

                }
            })
        }
    </script>
  • 基本属性

title 图表标题的相关属性

legend 图例的相关属性

xAxis x轴的相关属性

series y轴展示内容的属性

  • 数据的获取

对于option{}中各属性的数据内容可从后端的视图函数(视图函数从数据库)中获取\

使用Aajx请求获取后台数据,并传给option

chart.py视图函数

def chart_bar(request):
   # 模拟数据库获取图表数据   以下可使用数据库获取
   legend = ['YQY', 'WYT']
   x_data = ['1月', '2月', '3月', '4月', '5月', '6月']
   series = [
       {
           'name': 'YQY',
           'type': 'bar',
           'data': [5, 20, 36, 10, 10, 20],
       },
       {
           'name': 'WYT',
           'type': 'bar',
           'data': [15, 40, 86, 90, 22, 88]
       }
   ]

   data_dict = {
       'status': True,
       'data': {
           'legend': legend,
           'x_data': x_data,
           'series': series,
       }
   }
   return JsonResponse(data_dict)

以上在视图函数中模拟数据库数据传到前端中

数据传输到前端后,Ajax请求对option的各个属性进行赋值

option.legend.data = res.data.legend;
option.xAxis.data = res.data.x_data;
option.series = res.data.series;

1.2.2 饼状图

  • 官方文档代码

在这里插入图片描述

option = {
  title: {
    text: 'Referer of a Website',
    subtext: 'Fake Data',
    left: 'center'
  },
  tooltip: {
    trigger: 'item'
  },
  legend: {
    orient: 'vertical',
    left: 'left'
  },
  series: [
    {
      name: 'Access From',
      type: 'pie',
      radius: '50%',
      data: [
        { value: 1048, name: 'Search Engine' },
        { value: 735, name: 'Direct' },
        { value: 580, name: 'Email' },
        { value: 484, name: 'Union Ads' },
        { value: 300, name: 'Video Ads' }
      ],
      emphasis: {
        itemStyle: {
          shadowBlur: 10,
          shadowOffsetX: 0,
          shadowColor: 'rgba(0, 0, 0, 0.5)'
        }
      }
    }
  ]
};
  • 使用

在html中id为m3的标签,展示饼状图

    <script type="text/javascript">
        $(function () {
            initPie();
        })

        //初始化饼状图
    function initPie() {
            // 基于准备好的dom,初始化echarts实例
            var myChart = echarts.init(document.getElementById('m3'));

            // 指定图表的配置项和数据
            var option = {
                title: {
                    text: '部门预算',
                    subtext: '副标题',
                    left: 'center'
                },
                tooltip: {
                    trigger: 'item'
                },
                legend: {
                    orient: 'vertical',
                    left: 'left',
                    bottom: 0,
                },
                series: [
                    {
                        name: '预算',
                        type: 'pie',
                        radius: '50%',
                        data: [], //待后端传来的数据
                        emphasis: {
                            itemStyle: {
                                shadowBlur: 10,
                                shadowOffsetX: 0,
                                shadowColor: 'rgba(0, 0, 0, 0.5)'
                            }
                        }
                    }
                ]
            };

            //使用ajax请求从后台获取数据
            $.ajax({
                url: '/chart/pie',
                type: 'get',
                dataType: 'json',
                success: function (res) {
                    //在此对图标的x轴,y轴,图例等进行赋值
                    if (res.status) {
                        //重新赋值
                        /*
                        series: [{name: '预算',type: 'pie',radius: '50%',data: [],}]
                        series 是一个仅有一个字典元素的列表,
                        series[0]取列表第一个元素,也就是这个字典
                        series 为仅含有一个字典元素的列表,series[0].data表示取出series列表的第一个字典元素的data键
                         */
                        option.series[0].data = res.data;

                        // 使用刚指定的配置项和数据显示图表。
                        myChart.setOption(option);
                    }

                }
            })
        }
    </script>
  • 基本属性

title 图表标题的相关属性

legend 图例的相关属性

xAxis x轴的相关属性

series y轴展示内容的属性

  • 数据的获取

对于option{}中各属性的数据内容可从后端的视图函数(视图函数从数据库)中获取\

使用Aajx请求获取后台数据,并传给option

chart.py视图函数

def chart_pie(request):
   '''构造饼图数据'''
   # 模拟从数据库获取数据
   series_data = [
       {'value': 1048, 'name': 'IT部门'},
       {'value': 735, 'name': '销售部'},
       {'value': 580, 'name': '宣传部'},
   ]
   data_dict = {
       'status': True,
       'data': series_data,
   }
   return JsonResponse(data_dict)

以上在视图函数中模拟数据库数据传到前端中

数据传输到前端后,Ajax请求对option的各个属性进行赋值

option.series[0].data = res.data;

2.文件的上传

2.1 基础操作

html上传页面

<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="text" name="username">
    <input type="file" name="avatar">
    <input type="submit" value="提交">
</form>
def upload_file(request):
    if request.method == 'GET':
        return render(request, 'upload_file.html')
    
    file_object = request.FILES['photo']  # 获取文件对象
    print(file_object.name)  # 获取文件名称

    # 生成文件名为file_object.name的文件
    f = open(file_object.name, mode='wb')
    # 由于文件在内存一块一块的存储,利用循环遍历每一块,写入f中
    for chunk in file_object.chunks():  # chunks()读取文件对象的内容
        f.write(chunk)
    f.close()
    return HttpResponse('上传成功')

request.POST 返回所有数据的组成的数据对象
request.FILES返回所有文件组成的数据对象

enctype="multipart/form-data"   
form标签中若不加此字段,上传的文件以文件名的形式通过request.POST传过来:
<QueryDict: {'csrfmiddlewaretoken': ['6oGNXjBGaHzqFGywRFd7JQWXrY7fQwB6cEURubTTxemKDA789nRjb3Kv5MEgYnOE'], 'username': ['123'], 'photo': ['20220829_20471734.jpg']}>

form标签加上此字段,上传的文件以文件的形式通过request.FILES传过来
<MultiValueDict: {}>

file_object = request.FILES['photo'] 获取文件对象(input框中name为photo的输入数据)
file_object.name 获取文件名称

f = open(file_object.name, mode='wb') 生成文件名为file_object.name的文件

# 由于文件在内存一块一块的存储,利用循环遍历每一块,写入f中
for chunk in file_object.chunks():  # chunks()读取文件对象的内容
	f.write(chunk)
f.close()

选择上传的图片后,点击提交按钮,图片会以post的方式传入视图函数,通过file_object = request.FILES['photo']获取文件对象,并且chunks()读取文件对象的内容,最终将图片下载到项目目录中

2.2通过文件批量上传数据

将excel中存在部门批量添加到部门列表中

在这里插入图片描述

部门页面增加批量上传按钮

<form method="post" enctype="multipart/form-data" action="/depart/multi">
	{% csrf_token %}
	<div class="form-group">
		<input type="file" name="exc">
	</div>
	<input type="submit" value="上传" class="btn-primary btn-sm">
</form>
def depart_multi(request):
    """批量添加excel文件内的数据"""
    # 1.获取上传的文件对象
    file_object = request.FILES.get("exc")
    print(file_object)
    # 2.对象传递给openpyxl,有openpyxl读取文件内容
    wb = load_workbook(file_object)
    sheet = wb.worksheets[0] # 获取表
    print(sheet) #<Worksheet "Sheet1">
    print(sheet.cell(2,1).value) #部门1

    # 3.循环获取每一个数据
    # 遍历sheet的每一行,从第二行开始
    for row in sheet.iter_rows(min_row=2):
        # 获取每行第一列的值
        title = row[0].value
        # 先判断部门是否存在
        flag = models.Department.objects.filter(title=title).exists()
        if not flag:
            models.Department.objects.create(title=title)
    return redirect('/depart/list')

file_object = request.FILES.get("exc") 获取上传的文件对象

wb = load_workbook(file_object)对象传递给openpyxl,有openpyxl读取文件内容

sheet = wb.worksheets[0] 获取表

sheet.iter_rows(min_row=2) 遍历sheet的每一行,从第二行开始

2.3 ModelForm实现文件上传

2.3.1 media的应用

  • static,存放静态文件的路径,包括:CSS、JS、项目图片。
  • media,用户在前端上传的数据的目录(文件均存在此文件的子文件中)。

media的启用

url.py中配置

from django.urls import path, re_path
from django.views.static import serve
from django.conf import settings

urlpatterns = [
    
	re_path(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}, name='media'),
    
]

settings.py中配置

import os

MEDIA_ROOT = os.path.join(BASE_DIR, "media")
MEDIA_URL = "/media/"

完成操作后,可以通过http://localhost:8000/media/xxx 来访问文件(xxx表示文件相对media的位置)

2.3.2 ModelForm实现city展示案例

models.py

class City(models.Model):
    """城市"""
    name = models.CharField(max_length=32,verbose_name="名称")
    count = models.IntegerField(verbose_name="人口")
    # 虽是FileField,但是本质上还是charField
    img = models.FileField(verbose_name="Logo",max_length=128,upload_to="city/")

img = models.FileField(verbose_name="Logo",max_length=128,upload_to="city/")

**upload_to = xxx 上传到 media/xxx目录中(不写默认上传到media目录) **

此时上传的图片自动存储到media/city/1.png

ModelForm定义

class UpMoldelForm(BootStrapModelForm):
    bootstrap_exclude_fields = ['img']

    class Meta:
        model = models.City
        fields = ['name', 'count', 'img']

bootstrap_exclude_fields = ['img'] img字段不使用BootStrapModelForm的输入框样式

city_add.html

{% extends 'layout.html' %}

{% block content %}
    <div class="panel panel-default">
        <div class="panel-heading">{{ title }}</div>
        <div class="panel-body">
            <form class="form" method="post" enctype="multipart/form-data" novalidate>
                {% csrf_token %}
                {% for field in form %}
                    <div class="form-group">
                        <label>{{ field.label }}</label>
                        {{ field }}
                        <span style="color: red">{{ field.errors.0 }}</span>
                        {#                        field.errors.0显示第一条错误即可#}
                    </div>
                {% endfor %}
                <input type="submit" class="btn btn-success" value="提交">
            </form>
        </div>
    </div>
{% endblock %}

视图函数city_add()

def upload_ModelForm(request):
    """ 上传文件和数据"""
    if request.method == 'GET':
        # 构造添加输入框
        form = UpMoldelForm()
        context = {
            'form': form,
            'title': 'ModelForm',
        }
        return render(request, 'upload_ModelForm.html', context)
    form = UpMoldelForm(data=request.POST, files=request.FILES)
    if form.is_valid():
        # 对于文件来说,自动保存定义时的路径位置  默认在media下  (media/city)
        # 保存文件的路径和名称   img:city/blog.png
        form.save()
        return redirect("/upload/city_list")
    context = {
        'form': form,
        'title': 'ModelForm',
    }
    return render(request, 'upload_ModelForm.html', context)

form = UpMoldelForm(data=request.POST, files=request.FILES) 获取前端的数据及文件

form.save() 在ModelForm中直接使用此语句进行保存数据到数据库**(数据库文件字段保存文件的路径和名称 img:city/blog.png)**

对于文件来说,自动保存定义时的路径位置 默认在media下 (media/city)

city_list.html

{% extends 'layout.html' %}

{% block content %}
    <div style="margin-bottom: 10px">
        <a type="button" class="btn btn-success" href="/upload/ModelForm"><span class="glyphicon glyphicon-plus-sign"
                                                                         aria-hidden="true"></span> 添加城市</a>

    </div>
    <div class="panel panel-default">
        <div class="panel-heading">城市列表</div>
        <div class="bs-example" data-example-id="hoverable-table">
            <table class="table table-hover">
                <thead>
                <tr>
                    <th>ID</th>
                    <th>名称</th>
                    <th>人口</th>
                    <th>Logo</th>
                </tr>
                </thead>
                <tbody>
                {% for obj in queryset %}
                    <tr>
                        <td>{{ obj.id }}</td>
                        <td>{{ obj.name }}</td>
                        <td>{{ obj.count }}</td>
                        <td>
                            {# obj.img图片相对于media的路径 #}
                            <img src="/media/{{ obj.img }}" style="height: 40px">
                        </td>
                    </tr>
                {% endfor %}
                </tbody>
            </table>
        </div>
    </div>
{% endblock %}

city_list()的视图函数

def city_list(request):
    queryset = models.City.objects.all()
    return render(request, "city_list.html", {'queryset': queryset})

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

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

相关文章

To 有缘看到的朋友,To myself

To 有缘看到的朋友&#xff0c;To myself 零、00时光宝盒 我们生而为人&#xff0c;而不是什么神仙妖怪&#xff0c;自然逃不脱凡尘种种不易。 世界并不完美&#xff0c;面对很多事情我们都很无奈甚至悲哀&#xff0c;但生活总要继续下去&#xff0c;当困难悄悄地来临&#xff…

薪资18K需要什么水平?来看看97年测试工程师的面试全过程…

我的情况 大概介绍一下个人情况&#xff0c;男&#xff0c;本科&#xff0c;三年多测试工作经验&#xff0c;懂python&#xff0c;会写脚本&#xff0c;会selenium&#xff0c;会性能&#xff0c;然而到今天都没有收到一份offer&#xff01;从年后就开始准备简历&#xff0c;年…

【Apache Camel】基础知识

【Apache Camel】基础知识 Apache Camel是什么Apache Camel基本概念和术语CamelContextEndpointsRoutesRouteBuilderComponentsMessageExchangeProcessorsDomain Specific Language&#xff08;DSL&#xff09; Apache Camel 应用执行步骤Apache Camel 示意图参考 Apache Camel…

【ArcGIS超级工具】基于ArcPy的矢量数据批量自动化入库工具

最近&#xff0c;有很多做规划的朋友私信我&#xff0c;想让我帮忙开发一款ArcGIS自动化脚本工具&#xff0c;实现点、线、面的自动化入库操作&#xff0c;帮他们在平时的内业数据处理工作中减少机械式重复性的工作&#xff0c;提高工作效率。为此&#xff0c;我详细了解了下目…

第一套试卷

1.队列的链式操作 循环链表实现的链式队列中&#xff0c;头指针的变动主要取决于队列的操作。一般来说&#xff0c;在循环链表队列中&#xff0c;头指针front指向队列的头节点&#xff0c;尾指针rear指向队列的尾节点的下一个位置。 当进行入队&#xff08;插入&#xff09;操…

基于词袋模型的场景识别(附源代码!!!)

目录 1. 任务要求2. 数据集3. 实现算法4. 实验结果5. 源代码 1. 任务要求 输入&#xff1a;给定测试集图片&#xff0c;预测在15个场景中的类别。任务&#xff1a; 实现Tiny images representation。实现最近邻分类器nearest neighbor classifier。实现SIFT特征词袋表示 输出&…

diffusion model (扩散模型)原理

扩散模型分为正向过程和反向过程。 正向过程为一点点在图片上添加噪声的过程&#xff0c;反向过程为去噪声的过程。 图片的生成就是反向过程&#xff0c;给一张高斯噪声图片&#xff0c;逐步去噪生成图片。 扩散模型和VAE的区别&#xff0c; VAE是一步到位的&#xff08;通过…

中文版国产Figma简单好上手

在过去的两年里&#xff0c;国内外协同办公室发展迅速。一方面&#xff0c;它是由突如其来的疫情推动的&#xff0c;另一方面&#xff0c;它是科学技术不断进步的必然结果。在市场的推动下&#xff0c;市场上出现了越来越多的协同办公软件&#xff0c;使工作场所的工作更加高效…

Java开发避坑指南,手把手教你写Java项目文档

前言 作为一个有丰富经验的微服务系统架构师&#xff0c;经常有人问我&#xff0c;“应该选择RabbitMQ还是Kafka&#xff1f;” 基于某些原因&#xff0c; 许多开发者会把这两种技术当做等价的来看待。的确&#xff0c;在一些案例场景下选择RabbitMQ还是Kafka没什么差别&…

2.Rust变量

变量的声明 let关键字 在Rust中变量必须要先声明才能使用&#xff0c;let关键字用于声明变量并将一个值绑定到该变量上。如下: fn main() {let var_name:i32 123123;println!("{}",var_name) //println! 是一个宏&#xff08;macros&#xff09;&#xff0c;可以…

遇见未来的你——陪伴是最长情的告白

目录 一、背景介绍二、思路&方案三、过程1.家庭中彼此的陪伴最长情2.事业中与合伙人与同事与朋友与产品的陪伴最长情3.人生中与计划与落实与啊哈的陪伴最长情4.肉体与灵魂分分合合的体验 四、总结 一、背景介绍 人有时候一转身就是一辈子&#xff0c;所以珍惜转身的每一个…

如何计算搭建光伏电站需要多少成本?

光伏电站&#xff0c;又称太阳能电站&#xff0c;是一种利用太阳能发电的电力系统。随着全球对可再生能源的需求日益增加&#xff0c;光伏电站的建设变得越来越普遍。然而&#xff0c;在投资光伏电站之前&#xff0c;了解其建设成本是非常重要的。本文将介绍如何计算搭建光伏电…

96、C++ 性能优化一览

在对 C++ 版本的 resnet50 经过大约 5 个版本的优化之后,性能也基本达到了预期。至少利用手写的 resnet50 在 CPU 上推理一张图片感觉不到卡顿了。 下面对这几个版本的性能优化做一个总结。 初始版本1 第一版本的 C++ 代码,并没有考虑性能问题,仅仅是想按照手写 resnet50 …

【学习】torch.nn.CrossEntropyLoss交叉熵损失函数

交叉熵损失函数torch.nn.CrossEntropyLoss 交叉熵主要是用来判定实际的输出与期望的输出的接近程度&#xff0c;为什么这么说呢&#xff0c;举个例子&#xff1a; 在做分类的训练的时候&#xff0c;如果一个样本属于第K类&#xff0c;那么这个类别所对应的输出节点的输出值应…

腾讯云服务器99元一年是真的吗?只要61元!

腾讯云服务器99元一年是真的吗&#xff1f;假的&#xff0c;不要99&#xff0c;只要61元&#xff01;又降价了&#xff01;腾讯云服务器多少钱一年&#xff1f;61元一年起&#xff0c;2核2G3M配置&#xff0c;腾讯云2核4G5M轻量应用服务器165元一年、756元3年&#xff0c;4核16…

腾讯云服务器99元一年是真的吗?又降价,现在只要61元

腾讯云服务器99元一年是真的吗&#xff1f;又降价&#xff0c;现在只要61元。腾讯云服务器多少钱一年&#xff1f;61元一年起&#xff0c;2核2G3M配置&#xff0c;腾讯云2核4G5M轻量应用服务器165元一年、756元3年&#xff0c;4核16G12M服务器32元1个月、312元一年&#xff0c;…

【好书推荐-第九期】Sora核心技术相关书籍《扩散模型:从原理到实战》与《GPT 图解:大模型是怎样构建的》:Sora的两大核心技术,都藏在这两本书里!

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公众号&#xff1a;洲与AI。 &#x1f388; 本文专栏&#xff1a;本文收录…

底层day1作业

思维导图&#xff1a; 一.总结keil5下载代码和编译代码需要注意的事项 当使用Keil5下载代码和编译代码时&#xff0c;有一些需要注意的事项。以下是总结&#xff1a; 1. 确保正确配置目标 2. 配置编译器选项。 3. 确保正确配置连接器脚本 4. 检查编译错误和警告。 5. …

生成式模型实战—小小案例(python)

实战之前&#xff0c;环境需要已经搭建好。如果环境没有搭建好&#xff0c;可以参考PyTorch2.0 环境搭建详细步骤(Nvidia显卡)-CSDN博客 接下来&#xff0c;我们今天的学习之旅~ Step1. 安装类库 transformers pip install transformers Step2. 代码敬上 from transformer…

使用VS Code运行Java SpringBoot项目

本文并不详细讲 Java 项目启动前需要哪些配置&#xff0c;本文主要受众是平时用惯了 Idea 的 Java 程序员&#xff0c;仅讲解如何用 VS Code 启动服务 前提条件 Jdk、Maven、Nacos、Seata、TDengine等该配置的配置&#xff0c;该启动的启动&#xff0c;就你平时用 Idea 启动项…