本博客分为三部分,一是字典和函数结合,代替if-else判断语句;二是数组的元素带有括号;三是完整代码。图片略多。

1. 字典和函数结合,代替if-else判断语句

  写函数时经常会遇到一个函数的某个参数有多个值可供选择的情况,并且每个可选值恰对应了一个子函数,这时需要用到if-else等判断语句来进行判断。其实也可以利用字典,字典的键为参数的可选值,字典的值为对应的子函数。举个例子:

  这是一小段支持向量机的核函数选择代码,用的是if-else来选择核函数,可选的核函数有三种:线性核函数、多项式核函数、高斯径向基核函数。

import numpy as np
# if-else 写法
def myfun_if(x,y,mode='linear'):
if mode=='linear':
return np.dot(x,y) # 线性核函数
elif mode=='polynomial':
return (1+np.dot(x,y))**2 # 多项式的阶数定为2
elif mode=='radial':
return np.exp(-1*pow(x-y,2).sum()) # 高斯径向基函数的gamma参数定为1 # 字典写法
myfun_dict={'linear':lambda x,y:np.dot(x,y),
'polynomial':lambda x,y:(1+np.dot(x,y))**2,
'radial':np.exp(-1*pow(x-y,2).sum())}

结果对比:

myfun_if(x=np.array([1,2,3]),
y=np.array([-1,-2,-3]),
mode='polynomial')
myfun_dict['polynomial'](x=np.array([1,2,3]),
y=np.array([-1,-2,-3]))

2. 数组的元素带有括号

  先看这样一个数组heros

heros=np.array([('刘备',180,192,214),('关羽',249,180,192),('张飞',250,122,175)],
dtype=[('人物', 'U8'), ('武力', 'f'),('智力', 'f'),('速度','f')])
heros

数组里面的元素虽然带括号,但不是元组,因为可以进行修改:

another=heros.copy()
another
another[0][0]='刘皇叔'
another
heros

但是依然可以拆包

for num,hero in enumerate(heros):
print('序号=',num,' ',
'hero:',hero,sep='')
# print(type(hero))
name,attack,IQ,speed = hero #对hero进行拆包
print(name,'的综合能力是',
np.mean([attack,IQ,speed]),'\n',sep='')

  也可以转为数据框

import pandas as pd
DF=pd.DataFrame(heros)
DF

但是列举(enumerate())的结果不同,结果是将数据框的每一列列举出来:

list(enumerate(DF))

3. 完整代码

# 1.字典和函数结合,代替if-else判断语句
import numpy as np
def myfun_if(x,y,mode='linear'):
if mode=='linear':
return np.dot(x,y)
elif mode=='polynomial':
return (1+np.dot(x,y))**2 # 多项式的阶数定为2
elif mode=='radial':
return np.exp(-1*pow(x-y,2).sum()) #高斯径向基函数的gamma参数定为1 myfun_dict={'linear':lambda x,y:np.dot(x,y),
'polynomial':lambda x,y:(1+np.dot(x,y))**2,
'radial':np.exp(-1*pow(x-y,2).sum())} myfun_if(x=np.array([1,2,3]),
y=np.array([-1,-2,-3]),
mode='polynomial')
myfun_dict['polynomial'](x=np.array([1,2,3]),
y=np.array([-1,-2,-3])) # 2.数组的元素带有括号
heros=np.array([('刘备',180,192,214),
('关羽',249,180,192),
('张飞',250,122,175)],
dtype=[('人物', 'U8'),
('武力', 'f'),
('智力', 'f'),
('速度','f')])
for num,hero in enumerate(heros):
print('序号=',num,' ',
'将领:',hero,sep='')
# print(type(hero))
name,attack,IQ,speed = hero
print(name,'的综合能力是',
np.mean([attack,IQ,speed]),'\n',sep='') DF=pd.DataFrame(heros)
list(enumerate(DF))

python3 小知识的更多相关文章

  1. 蓝牙Bluetooth技术小知识

    蓝牙Bluetooth技术以及广泛的应用于各种设备,并将继续在物联网IoT领域担任重要角色.下面搜集整理了一些关于蓝牙技术的小知识,以备参考. 蓝牙Bluetooth技术始创于1994年,其名字来源于 ...

  2. HTML+CSS中的一些小知识

    今天分享一些HTML.CSS的小知识,希望能够对大家有所帮助! 1.解决网页乱码的问题:最重要的是要保证各个环节的字符编码一致! (1)编辑器的编辑环境的字符集(默认字符集):Crtl+U 常见的编码 ...

  3. iOS APP开发的小知识(分享)

          亿合科技小编发现从2007年第一款智能手机横空出世,由此开启了人们的移动智能时代.我们从一开始对APP的陌生,到现在的爱不释手,可见APP开发的出现对我们的生活改变有多巨大.而iOS AP ...

  4. Unix系统小知识(转)

    Unix操作系统的小知识 2.VI添加行号/翻页/清屏 .在对话模式时(即输完Esc再输入: ),输入“:set number”可以将编辑的文本加上行号.跟玩俄罗斯方块一样方便的上下左右移动箭头的快捷 ...

  5. salesforce 零基础开发入门学习(十)IDE便捷小知识

    在这里介绍两个IDE的便捷开发的小知识. 一) 本地调试 由于salesforce代码只能提交以后才能调试,所以很多时候调试代码很麻烦.新版增加了一个特性:即可以在本地调试相关的代码或者查看相关代码运 ...

  6. Jquery:小知识;

    Jquery:小知识: jQuery学习笔记(二):this相关问题及选择器   上一节的遗留问题,关于this的相关问题,先来解决一下. this的相关问题 this指代的是什么 这个应该是比较好理 ...

  7. HTML小知识---Label

    今天知道了一个html小知识: <input type="checkbox" id="chkVersion" />                 ...

  8. Unicode和汉字编码小知识

    Unicode和汉字编码小知识 将汉字进行UNICODE编码,如:“王”编码后就成了“\王”,UNICODE字符以\u开始,后面有4个数字或者字母,所有字符都是16进制的数字,每两位表示的256以内的 ...

  9. Java异常的一个小知识

    有以下两个代码: package com.lk.A; public class Test3 { public static void main(String[] args) { try { int a ...

  10. 12个你未必知道的CSS小知识

    虽然CSS并不是一种很复杂的技术,但就算你是一个使用CSS多年的高手,仍然会有很多CSS用法/属性/属性值你从来没使用过,甚至从来没听说过. 1.CSS的color属性并非只能用于文本显示 对于CSS ...

随机推荐

  1. 96、nacos大量日志

    问题描述:access 日志大量打印,相关 Issue 点击这里.主要表现是: {nacos.home}/logs/access_log.2019-xx-xx.log类似格式文件名的日志大量打印,而且 ...

  2. day01-java流程

    Scanner对象 基本语法: Scanner s = new Scanner(System.in); next()方法 nextLine()方法 顺序结构 选择结构 if单选结构 语法: if(布尔 ...

  3. Python语言基础实验(第四周)

    Python语言基础实验(第四周) 一.实验目的 1.了解并掌握python中序列及序列的常用操作. 2.根据实际需要运用合适的序列类型来完成实验. 二.实验环境 软件版本:Python 3.10 6 ...

  4. 还在拿flex进行布局吗?快来试试grid网格布局吧

    例: 遇到这种布局要求我们应该怎么办? 方法1:使用flex布局 <style> * { padding: 0; margin: 0; } .gird_Box { width: 100vw ...

  5. grafana+prometheus+tomcat 监控tomcat

    一.前提 1.tomcat作为java项目首选的部署容器.但是,在做测试,或者是在运维管理生产服务器的时候,想要监控tomcat的实时运行情况,却不是那么容易的 2.grafana(已安装和prome ...

  6. 探索如何在java中执行python脚本

    一个偶然的场景,笔者需要在java代码中执行某个python脚本,并且需要向脚本中传递参数,有可能的话,还要获取该脚本的某些执行结果,回到主程序中继续执行下去. 没有思路之前,狭隘的想法是,java中 ...

  7. OS-lab1

    OS-lab1 boot boot文件夹中只有start.S文件,这个文件用于初始化内核.关掉中断,设置内核栈,并跳转到main函数. init init.c 执行初始化操作. main.c 主函数, ...

  8. rxswift自定义扩展UI组件

    扩展UI组件时常用到的一些发布者与订阅者如下: 发布者: ControlEvent(专门用于描述 UI 控件所产生的事件) 订阅者(观察者): Binder(专门用于绑定UI状态的,如:当某个状态改变 ...

  9. Nginx/1.13.3热升级1.21.6

    背景: 根据其服务器响应标头,安装的 nginx 版本为低于 1.16.1 的 1.9.5,或是低于 1.17.3 的 1.17.x.因此,它受到多种拒绝服务漏洞的影响: - HTTP/2 协议堆栈中 ...

  10. Linux下添加启动项并简化操作命令-nginx为例

    1.添加nginx为启动项        1. vi /etc/rc.d/rc.local        2.将启动命令直接添加到最后即可 *注:通过下图可知  /etc/rc.d/rc.local和 ...