python3 小知识
本博客分为三部分,一是字典和函数结合,代替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 小知识的更多相关文章
- 蓝牙Bluetooth技术小知识
蓝牙Bluetooth技术以及广泛的应用于各种设备,并将继续在物联网IoT领域担任重要角色.下面搜集整理了一些关于蓝牙技术的小知识,以备参考. 蓝牙Bluetooth技术始创于1994年,其名字来源于 ...
- HTML+CSS中的一些小知识
今天分享一些HTML.CSS的小知识,希望能够对大家有所帮助! 1.解决网页乱码的问题:最重要的是要保证各个环节的字符编码一致! (1)编辑器的编辑环境的字符集(默认字符集):Crtl+U 常见的编码 ...
- iOS APP开发的小知识(分享)
亿合科技小编发现从2007年第一款智能手机横空出世,由此开启了人们的移动智能时代.我们从一开始对APP的陌生,到现在的爱不释手,可见APP开发的出现对我们的生活改变有多巨大.而iOS AP ...
- Unix系统小知识(转)
Unix操作系统的小知识 2.VI添加行号/翻页/清屏 .在对话模式时(即输完Esc再输入: ),输入“:set number”可以将编辑的文本加上行号.跟玩俄罗斯方块一样方便的上下左右移动箭头的快捷 ...
- salesforce 零基础开发入门学习(十)IDE便捷小知识
在这里介绍两个IDE的便捷开发的小知识. 一) 本地调试 由于salesforce代码只能提交以后才能调试,所以很多时候调试代码很麻烦.新版增加了一个特性:即可以在本地调试相关的代码或者查看相关代码运 ...
- Jquery:小知识;
Jquery:小知识: jQuery学习笔记(二):this相关问题及选择器 上一节的遗留问题,关于this的相关问题,先来解决一下. this的相关问题 this指代的是什么 这个应该是比较好理 ...
- HTML小知识---Label
今天知道了一个html小知识: <input type="checkbox" id="chkVersion" /> ...
- Unicode和汉字编码小知识
Unicode和汉字编码小知识 将汉字进行UNICODE编码,如:“王”编码后就成了“\王”,UNICODE字符以\u开始,后面有4个数字或者字母,所有字符都是16进制的数字,每两位表示的256以内的 ...
- Java异常的一个小知识
有以下两个代码: package com.lk.A; public class Test3 { public static void main(String[] args) { try { int a ...
- 12个你未必知道的CSS小知识
虽然CSS并不是一种很复杂的技术,但就算你是一个使用CSS多年的高手,仍然会有很多CSS用法/属性/属性值你从来没使用过,甚至从来没听说过. 1.CSS的color属性并非只能用于文本显示 对于CSS ...
随机推荐
- ding抓回放
fiddler 添加代码 var sToInsert = "<script src='https://cdn.jsdelivr.net/gh/Tencent/vConsole@3.8. ...
- 获取select的选中的值
var select = document.getElementById("sec")//获取元素 var idx = select.selectedIndex;//获取当前选中的 ...
- JS 动态获取 Url 参数(封装函数)
话不多说直接上代码: 封装函数如下: (如果urls固定,可以只写一个name变量) getQueryString(name, urls) { var url = urls; // 获取URL // ...
- mysql 当年所有月份列表
-- 不依赖任何表,只是用mysql自带函数方法select concat((select year(now())),'-01') as `date`union select concat((sele ...
- 【Frida】Java反射调用
通过反射调用,获取类名 参数Object obj 类名 String str 方法名 static Object a(Object obj, String str) { try { return ob ...
- Kubernetes 安装网络插件(calico)
简介 Calico是Kubernetes生态系统中另一种流行的网络选择.虽然Flannel被公认为是最简单的选择,但Calico以其性能.灵活性而闻名.Calico的功能更为全面,不仅提供主机和pod ...
- leecode72. 编辑距离
72. 编辑距离 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个 ...
- Blockchain for Edge of Things: Applications, Opportunities, and Challenges
物联网:物联网设备,如传感器和手机,负责从物理环境中生成或收集数据,然后通过接入点或基站传输到附近的边缘服务器(ES).具有某些资源的物联网设备(例如,智能手机和笔记本电脑)可以充当移动区块链实体进行 ...
- NGAC下一代访问控制
NGAC,即下一代访问控制,采用将访问决定数据建模为图形的方法.NGAC 可以实现系统化.策略一致的访问控制方法,以高精细度授予或拒绝用户管理能力. 在这张图中,我们可以看到 /hr-docs 文件夹 ...
- react native 音频播放 react-native-sound
先放一个效果图:该图实现的效果,点击播放按钮,进度条随着时间移动,点击暂停按钮,进度条停止移动 第一步,用到什么库 1.zmxv/react-native-sound 播放声音的库 2.calls ...