2021-4-28

赋值运算符

  1. 基本的赋值运算符
  2. 扩展的赋值运算符:+=,-=,*=,/=,...

int a=8;

a+=10;

System.out.println(a);//18

关系运算符

  1. ==,!=,>,>=,<,<=
  2. 关系运算符的结果都是boolean型,也就是说要么是true,要么是false
  3. 注意事项:关系运算符“==”不能误写为“=”

int a=10;

int b=20;

boolean bo=a==b;

System.out.println(bo);//false

boolean bo1=a!=b;

System.out.pritnln(bo1);//true

逻辑运算符

  1. 逻辑运算符用于连接布尔型表达式,在java中不可以写成3<x<6,应该写成x>3&&x<6
  2. &,|,^,!(取反)

“&”和“&&”的区别:

  1. 单&时,左边无论真假,右边都进行运算。
  2. 双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。

”|“和”||”的区别同理。

int a=10;

int b=20;

boolean bo=  a>10 && a<20; 双符号的如果第一个关系表达式是错的,则结果就是错的

System.out.println(bo);//false

boolean bo1=  a==10 || a<20;

System.out.println(bo);//true

boolean boo=  a<7 && a++>4;

System.out.println(a);//10

boolean boo=  a<7 & a++>4;单符号的无论第一个能否确定结果,后面的式子都执行。

System.out.println(a);//11

异或:相同为false,不同为true

Boolean bo=true^true;

System.out.println(bo);//false

Boolean boo=true^false;

System.out.println(boo);//true

三元运算符

  1. 格式

(关系表达式)?表达式1:表达式2;

如果条件为true,运算后的结果是表达式1;

如果条件为fasle,运算后的结果为表达式2;

  1. 示例

获取两个数中大数

int x=3;y=4;z;

z=(x>y)?x:y;  // 变量存储的 就是两个数的大数

int a=2>1?0:-1;

System.out.println((a);//0

三元运算符练习:

int a=10;

int b=20;

用三元运算符求出最大的那个数 然后输出

int d=a<b?b:a;

System.out.println(d);//20

int a=10;

int b=20;

int c=30;

用三元运算符求出三个数中最大的

方法1:int max=a>b?   (a>c?a:c) :(b>c?b:c)   三元运算符可以嵌套使用

方法2:int max=a>b?b:c;

max=max>c?max:c;

System.out.println(max);

键盘录入Scanner

  1. 键盘录入概述-----我们目前在写程序的时候,数据值都是个固定的,但是实际在开发过程中,数据值肯定是变化的,所以,把数据改进为键盘录入,提高程序的灵活性。
  2. 如何实现键盘录入数据呢?(目前先记住使用)

(1)导包---位置放到class定义的上面  import java.util.Scanner;

  1. 创建对象Scanner sc=new Scanner(System.in);
  2. 接收数据int x=sc.nextInt();

键盘录入数据练习

  1. 键盘录入两个数据,并对这两个数据求和,输出其结果。
  2. 键盘录入两个数据,获取这两个数据中的最大值。
  3. 键盘录入这两个数据,比较这两个数据是否相等。
  4. 键盘录入三个数据,获取这三个数据中的最大值

流程控制语句

  1. 在一个程序执行过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说程序的流程对运行结果有直接的影响。所以,我们必须清楚每条语句的执行流程。而且,很多时候我们要通过控制语句的执行顺序来实现我们要完成的功能。
  2. 流程控制语句分类
  1. 顺序结构
  2. 选择结构
  3. 循环结构

顺序结构

  1. 顺序结构概述-----是程序中最简单最基本的流程控制语句,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。
  2. 总的来说:写在前面的先执行,写在后面的后执行。

选择结构

  1. 选择结构---也被称为分支结构。
  2. 选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。
  3. Java语言提供了两种选择结构语句
  1. if 语句
  2. switch 语句

选择结构(if语句)

  1. if语句有三种格式
  2. if语句第一种格式

if (关系表达式){

语句体

代码块

}

  1. 执行流程:
  1. 首先判断关系表达式看其结果是否是true还是false
  2. 如果是true就执行语句体
  3. 如果是false就不执行语句体

第1种写法  只有1个条件进行判断

if(判断语句){语句1} 我们也可以省略这对{} 前提是{}里面只有一行代码

if(true){

System.out.println(1);

}

System.out.println(2);

}

第2种写法   只有1个条件进行判断

Int  a=10;

Int b=20;

If(a>b){

System.out.println(“对”);

}else{

System.out.println(“错”);

}

System.out.println(1111);

第3种写法   多个条件进行判断

if(){

}else if(){

}else if(){

}else{

}

if语句可以嵌套使用

If(){

if(){

}

}

控制台输入三个数  最终输出三个数最大的那个数  用if语句做

选择结构语句(switch语句)

  1. 执行流程---
  1. 首先计算出表达式的值
  2. 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
  3. 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

选择结构(switch语句)

  1. switch语句格式

switch(表达式){byte  short  int  char  String

case 值1:

语句体1;

break;

case 值2:

语句体2;

break;

----

default;

case 值n+1:

break;

}

int a=1;

switch(a){

case 1:

System.out.println(“a”);

break;

case 2:

System.out.println(“b”);

break;

case 3:

System.out.println(“c”);

break;

case 4:

System.out.println(“d”);

break;

case 5:

System.out.println(“e”);

break;

default:

System.out.println(“w”);

case 7:

System.out.println(“g”);

case 8:

System.out.println(“k”);

}

当a=1,结果abcdew

当a=4,结果dew

如果a的值和哪个case后面的值的对应上 就从那个case开始向下执行 遇到break就结束

如果没有对应上的,就从default开始向下执行

一般在项目中不会遇上default后面还有case

switch括号里面和case后面的值,可以是byte short  int  char  String  还有枚举类型  不可以是long类型、小数类型

作业:通过控制台输入一个月份

Scanner sc=new Scanner(System.in);

int month=sc.nextInt();

switch(month){

case 3;

case 4;

case 5;

System.out.println(“春天”);

break;

}

case 6;

case 7;

case 8;

System.out.println(“夏天”);

break;

}

Case9;

case 10;

case 11;

System.out.println(“秋天”);

break;

}

case 12;

case 1;

case 2;

System.out.println(“冬天”);

break;

}

            case 5:
                System.out.println("春天");
                break;
            case 6:
            case 7:
            case 8:
                System.out.println("夏天");
                break;
            case 9:
            case 10:
            case 11:
                System.out.println("秋天");
                break;
            case 12:
            case 1:
            case 2:
                System.out.println("冬天");
                break;
        }

内容概要:本文介绍了ENVI Deep Learning V1.0的操作教程,重点讲解了如何利用ENVI软件进行深度学习模型的训练与应用,以实现遥感图像中特定目标(如集装箱)的自动提取。教程涵盖了从数据准备、标签图像创建、模型初始化与训练,到执行分类及结果优化的完整流程,并介绍了精度评价与通过ENVI Modeler实现一键化建模的方法。系统基于TensorFlow框架,采用ENVINet5(U-Net变体)架构,支持通过点、线、面ROI或分类图生成标签数据,适用于多/高光谱影像的单一类别特征提取。; 适合人群:具备遥感图像处理基础,熟悉ENVI软件操作,从事地理信息、测绘、环境监测等相关领域的技术人员或研究人员,尤其是希望将深度学习技术应用于遥感目标识别的初学者与实践者。; 使用场景及目标:①在遥感影像中自动识别和提取特定地物目标(如车辆、建筑、道路、集装箱等);②掌握ENVI环境下深度学习模型的训练流程与关键参数设置(如Patch Size、Epochs、Class Weight等);③通过模型调优与结果反馈提升分类精度,实现高效自动化信息提取。; 阅读建议:建议结合实际遥感项目边学边练,重点关注标签数据制作、模型参数配置与结果后处理环节,充分利用ENVI Modeler进行自动化建模与参数优化,同时注意软硬件环境(特别是NVIDIA GPU)的配置要求以保障训练效率。
你已经成功将 `Date` 列转换为 `datetime64[ns]` 类型,并且输出如下: ``` 0 2021-01-04 1 2021-01-05 2 2021-01-06 3 2021-01-07 4 2021-01-08 Name: Date, dtype: datetime64[ns] ``` ✅ **这说明日期解析完全正确!** 接下来你应该执行: ```python df.set_index('Date', inplace=True) df.sort_index(inplace=True) # 确保时间顺序正确 ``` 然后进入主逻辑,使用我们之前修复过的区间筛选函数(作用于索引)即可正常运行。 --- ### ✅ 当前状态确认清单 | 检查项 | 是否完成 | 说明 | |--------|----------|------| | ✔️ `Date` 列是否为 `datetime64[ns]`? | ✅ 是 | 输出已验证 | | ✔️ 是否设置为索引? | ⚠️ 需手动执行 | 必须调用 `set_index` | | ✔️ 时间是否升序排列? | ⚠️ 建议排序 | 使用 `sort_index()` 更安全 | | ✔️ 区间过滤函数是否作用于 `index`? | ✅ 是 | 否则会出错 | --- ### ✅ 推荐后续代码(确保流程完整) ```python # 设置索引并排序 df.set_index('Date', inplace=True) df.sort_index(inplace=True) # 查看数据类型和前几行 print("Index dtype:", df.index.dtype) print("Data head:") print(df.head()) ``` 此时你的 `df.index` 是一个有序的 `DatetimeIndex`,可以安全用于以下操作: ```python intervals = { 'YTD': lambda idx: idx >= pd.Timestamp(year=idx[-1].year, month=1, day=1), '1Y': lambda idx: idx >= idx[-1] - pd.DateOffset(years=1), '6M': lambda idx: idx >= idx[-1] - pd.DateOffset(months=6), '3M': lambda idx: idx >= idx[-1] - pd.DateOffset(months=3), '1M': lambda idx: idx >= idx[-1] - pd.DateOffset(months=1), } ``` 因为 `idx[-1]` 就是最后一个交易日,比如 `2024-03-28`,它是一个 `pd.Timestamp`,支持 `.year`、`.month` 等属性,不会再报错! --- ### ✅ 示例:查看当前 YTD 起始日 你可以加一段调试代码来验证逻辑是否正确: ```python # 调试:打印各个区间的起始时间(以最后一个日期为基准) last_date = df.index[-1] print(f"最新交易日: {last_date}") print("各区间起始日:") print("YTD:", pd.Timestamp(year=last_date.year, month=1, day=1)) print("1Y: ", last_date - pd.DateOffset(years=1)) print("6M: ", last_date - pd.DateOffset(months=6)) print("3M: ", last_date - pd.DateOffset(months=3)) print("1M: ", last_date - pd.DateOffset(months=1)) ``` 输出示例: ``` 最新交易日: 2024-03-28 各区间起始日: YTD: 2024-01-01 1Y: 2023-03-28 6M: 2023-09-28 3M: 2024-01-28 1M: 2024-02-28 ``` 这些日期就是每个区间的“开始日”,之后用它们做布尔索引就能提取对应时间段的数据。 --- ### ✅ 总结:你现在可以继续了! 只要你完成了以下几步: 1. ✅ 成功将 `Date` 转为 `datetime64[ns]` 2. ✅ 执行了 `df.set_index('Date')` 和 `sort_index()` 3. ✅ 使用基于 `idx`(即 DatetimeIndex)的过滤函数 那么之前的两个错误(`float64 has no attribute year` 和 `>= not supported`)都已彻底解决,现在可以放心运行完整的绩效分析代码。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值