.png)
#np.where()的几个例子
# condition, x, y均指定
np.where([[False, True], [True, False]],
[[1, 2], [3, 4]],
[[9, 8], [7, 6]])
# 只指定condition时,返回np.nonzero(),即非零元素的索引
x = np.arange(9.).reshape(3, 3)
np.where( x > 5 )
x[np.where( x > 3.0 )] # 将索引值带入原数组,得到满足大于3条件的元素
arr = np.random.normal(size=(4,4))
print(arr)
np.where(arr > 0, 2, -2)
np.where(arr > 0, 2, arr) # 只将大于0的元素设置为2
# 用np.where()进行多条件判断
# 例子: 对0~100范围内的数进行判断
# 纯python
sum1 = 0
for i in range(0, 100):
if np.sqrt(i) > 3 and np.sqrt(i) < 5: # 平方根在(3, 5)之间
sum1 += 3
elif np.sqrt(i) > 3: # 平方根在[5, 10)之间
sum1 += 2
elif np.sqrt(i) < 5: # 平方根在(0, 3]之间
sum1 += 1
else:
sum1 -= 1
print(sum1)
注: 这个例子其实用的不好,最后一个sum -= 1实际上没有用到,只是用这个例子说明多条件判断。
# 使用np.where()
num_list = np.arange(0, 100)
cond1 = np.sqrt(num_list) > 3
cond2 = np.sqrt(num_list) < 5
result = np.where(cond1 & cond2, 3, np.where(cond1, 2, np.where(cond2 < 5, 1, -1)))
print(sum(result))
# 数学与统计方法
arr = np.random.normal(size=(5, 4))
arr.mean() # 平均值
np.mean(arr)
arr.sum() # 求和
arr.mean(axis=1) # 对行求平均值
arr.sum(0) # 对每列求和
arr.sum(axis=0)
arr = np.arange(9).reshape(3, 3)
arr.cumsum(0) # 每列的累计和
arr.cumprod(1) # 每行的累计积
注: 关于numpy中axis的问题
axis=1可理解为跨列操作
axis=0可理解为跨行操作
# 布尔型数组
arr = np.random.normal(size=(10, 10))
(arr > 0).sum() # 正值的数量
bools = np.array([False, False, True, False])
bools.any() # 有一个为True,则结果为True
bools.all() # 必须全为True,结果才为True
# 排序
arr = np.random.normal(size=(4, 4))
print(arr)
arr.sort() # 对每行元素进行排序
arr = np.random.normal(size=(5, 3))
print(arr)
arr.sort(0) # 对每列元素进行排序
# 求25%分位数(排序后根据索引位置求得)
num_arr = np.random.normal(size=(1000, 1000))
num_arr.sort()
print(num_arr[0, int(0.25 * len(num_arr))])
# 求唯一值
names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
print(np.unique(names))
# 纯Python
print(sorted(set(names)))
# 判断values中的列表元素是否在数组list_a中
arr_a = np.array([6, 0, 0, 3, 2, 5, 6])
values = [2, 3, 6]
np.in1d(arr_a, values)
# 线性代数相关的函数
x = np.array([[1., 2., 3.], [4., 5., 6.]])
y = np.array([[6., 23.], [-1, 7], [8, 9]])
x.dot(y) # 矩阵的乘法
np.dot(x, y)
np.dot(x, np.ones(3))
np.random.seed(12345)
from numpy.linalg import inv, qr
X = np.random.normal(size=(5, 5))
mat = X.T.dot(X) # 矩阵X转置后再与原X相乘
inv(mat) # 求逆矩阵
mat.dot(inv(mat)) # 与逆矩阵相乘
# 随机数
samples = np.random.normal(size=(4, 4))
samples
from random import normalvariate
# normalvariate(mu,sigma)
# mu: 均值
# sigma: 标准差
# mu = 0, sigma=1: 标准正态分布
# 比较纯Python与numpy生成指定数量的随机数的速度
N = 1000000 # 设置随机数的数量
get_ipython().magic(u'timeit samples = [normalvariate(0, 1) for _ in range(N)]')
get_ipython().magic(u'timeit np.random.normal(size=N)')
结果:
818 ms ± 9.87 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
34.5 ms ± 164 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
# 范例:随机漫步
import random
# 纯Python
position = 0
walk = [position]
steps = 1000
for i in range(steps):
step = 1 if random.randint(0, 1) else -1
position += step
walk.append(position)
# np
np.random.seed(12345)
nsteps = 1000
draws = np.random.randint(0, 2, size=nsteps) # 取不到2
steps = np.where(draws > 0, 1, -1)
walk = steps.cumsum() # 求累计和
walk.min()
walk.max()
(np.abs(walk) >= 10).argmax() # 首次到达10的索引数
# 一次模拟多个随机漫步
nwalks = 5000 # 一次生成5000组漫步数据
nsteps = 1000
draws = np.random.randint(0, 2, size=(nwalks, nsteps))
steps = np.where(draws > 0, 1, -1)
walks = steps.cumsum(1) # 将5000个样本中每一步的值进行累积求和
print(walks)
# 计算首次到达30
hits30 = (np.abs(walks) >= 30).any(1) # 在列方向上进行对比
print(hits30)
print(hits30.sum()) # 到达+/-30的个数
# 查看每一步中首次到达30的步数
crossing_times = (np.abs(walks[hits30]) >= 30).argmax(1)
# 求到达30的平均步数
crossing_times.mean()
# 标准正态分布
steps = np.random.normal(loc=0, scale=0.25, size=(nwalks, nsteps))
- Python学习笔记之常用函数及说明
Python学习笔记之常用函数及说明 俗话说"好记性不如烂笔头",老祖宗们几千年总结出来的东西还是有些道理的,所以,常用的东西也要记下来,不记不知道,一记吓一跳,乖乖,函数咋这么多 ...
- numpy学习笔记 - numpy数组的常见用法
# -*- coding: utf-8 -*- """ 主要记录代码,相关说明采用注释形势,供日常总结.查阅使用,不定时更新. Created on Mon Aug 20 ...
- MySql cmd下的学习笔记 —— 有关常用函数的介绍(数学函数,聚合函数等等)
(一)数学函数 abs(x) 返回x的绝对值 bin(x) 返回x的二进制(oct返回八进制,hex返回十六进制) ceiling(x) ...
- Socket 学习笔记 01 常用函数
常用方法 创建套接字: socket() 绑定本机端口: bind() 建立连接: connect(),accept() 侦听端口: listen() 数据传输: send() ...
- Java学习笔记——字符串常用函数
class JavaTest4_String { public static void main(String[] args) { String str1 = "IOS,ANDROID,BB ...
- Numpy学习笔记(下篇)
目录 Numpy学习笔记(下篇) 一.Numpy数组的合并与分割操作 1.合并操作 2.分割操作 二.Numpy中的矩阵运算 1.Universal Function 2.矩阵运算 3.向量和矩阵运算 ...
- Numpy学习笔记(上篇)
目录 Numpy学习笔记(上篇) 一.Jupyter Notebook的基本使用 二.Jpuyter Notebook的魔法命令 1.%run 2.%timeit & %%timeit 3.% ...
- [学习笔记] Numpy基础 系统学习
[学习笔记] Numpy基础 上专业选修<数据分析程序设计>课程,老师串讲了Numpy基础,边听边用jupyter敲了下--理解+笔记. 老师讲的很全很系统,有些点没有记录,在PPT里就不 ...
- NumPy学习笔记 三 股票价格
NumPy学习笔记 三 股票价格 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.&l ...
随机推荐
- jq点击按钮打开和关闭弹出层,点击除了当前按钮以外的地方关闭弹出层
1.html <a id="more" onclick="moreFun()">更多</a> <ul id="moreL ...
- vertical-align到底是个啥
https://developer.mozilla.org/en-US/docs/Web/CSS/vertical-align http://phrogz.net/css/vertical-align ...
- HDU 5289 Assignment [优先队列 贪心]
HDU 5289 - Assignment http://acm.hdu.edu.cn/showproblem.php?pid=5289 Tom owns a company and he is th ...
- [置顶]
智能家居开源项目 The open Home Automation Bus (openHAB)
================================================================================ 2014-05-19 论文的事情太多, ...
- BZOJ 3203 [SDOI2013]保护出题人 (凸包+三分)
洛谷传送门 题目大意:太长略 每新加入一个僵尸,容易得到方程$ans[i]=max{\frac{sum_{i}-sum_{j-1}}{s_{i}+d(i-j)}}$ 即从头开始每一段僵尸都需要在规定距 ...
- dataTable 动态列 二次加载
需要把 列头和表格内容全部清空 if ($('#datatable').hasClass('dataTable')) { var dttable = $('#datatable').dataTable ...
- java实现多个数字求和_图形化界面
一,设计思想 1,通过简单的窗口实现多个数字的输入与输出. 2,可通过用户输入数字的数量来实现多个数字的求和. 3,定义整型数组变量number和字符串型数组变量integer,将输入的字符串变量赋给 ...
- linux中fork()函数详解(搬砖)
一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同, ...
- 洛谷 P2071 座位安排 seat.cpp/c/pas
P2071 座位安排 seat.cpp/c/pas 题目背景 公元二零一四年四月十七日,小明参加了省赛,在一路上,他遇到了许多问题,请你帮他解决. 题目描述 已知车上有N排座位,有N*2个人参加省赛, ...
- 讲一讲java异常及自定义异常
1.异常,说白了.两种,一种就是就是不能让代码通过编译的异常.另一种就是程序运行期间出现的异常.异常就是错误,只要出现异常,程序就不会向下运行了.就不会执行后面的代码了.这时候就可以通过显示statc ...