【利用python进行数据分析】第4章numpy基础

PlutoSDR驱动安装避坑指南:从设备管理器异常到MATLAB 2023b完美识别 本文是一份详细的PlutoSDR驱动安装与MATLAB 2023b集成排错指南。针对Windows系统下常见的设备管理器异常、驱动兼容性问题,提供了从旧驱动清理、手动指定驱动文件到USB连接稳定性排查的完整解决方案。重点阐述了如何通过离线安装硬件支持包,并利用MATLAB命令进行连接测试与射频信号验证,最终实现设备的完美识别与稳定调用。 阅读详情

Numpy的ndarray:一种多维数组对象

NumPy最重要的一个特点就是其N维数组对象(即ndarray),该对象是一个快速而灵活的大数据集容器。你可以利用这种数组对整块数据执行一些数学运算。其语法跟标量元素之间的运算一样:

from numpy.random import randn
data=randn(2,3)
print(data)
print(data*10)
print(data+data)
#shape表示各维度大小的元组
print(data.shape)
#dtype是用于说明数组类型的对象
print(data.dtype)

输出结果:

[[ 0.19944519 -0.61506    -0.62834285]
 [-0.35818596 -0.02595529 -1.02141258]]
[[  1.99445186  -6.15060001  -6.28342852]
 [ -3.58185957  -0.25955286 -10.2141258 ]]
[[ 0.39889037 -1.23012    -1.2566857 ]
 [-0.71637191 -0.05191057 -2.04282516]]
(2, 3)
float64

创建ndarray

创建数组最简单的办法就是使用array函数。它接受一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的NumPy数组。以一个列表的转换为例:

import numpy as np
data1=[6,7.5,8,0,1]
arr1=np.array(data1)
print(arr1)
#嵌套序列(比如由一组等长列表组成的列表)将会被转换为一个多维数组
data2=[[1,2,3,4],[5,6,7,8]] 
arr2=np.array(data2) 
print(arr2) 
print(arr2.ndim) 
print(arr2.shape)

输出结果:

[ 6.   7.5  8.   0.   1. ]
[[1 2 3 4]
 [5 6 7 8]]
2
(2, 4)

除np.array之外,还有一些函数也可以新建数组。比如,zeros和ones分别可以创建指定长度或形状的全0或全1数组。empty可以创建一个没有任何具体值的数组。要用这些方法创建多维数组,只需传入一个表示形状的元组即可:

print(np.zeros(10))
print(np.zeros((3, 6)))
y = np.arange(3)
zerolike=np.zeros_like(y)
print(zerolike)
#empty返回的不是0,而是一些未初始化的随机值
print(np.empty((2, 3, 2)))
#arange是Python内置函数range的数组版
print(np.arange(15))
#创建一个正方形的单位矩阵,eye和identity一样
print(np.eye(3))
y = np.arange(3)
zerolike=np.zeros_like(y)
print(zerolike)
#empty返回的不是0,而是一些未初始化的随机值
print(np.empty((2, 3, 2)))
#arange是Python内置函数range的数组版
print(np.arange(15))
#创建一个正方形的单位矩阵,eye和identity一样
print(np.eye(3))

输出结果:

[ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
[[ 0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.]]
[0 0 0]
[[[  4.87953219e-316   4.83833942e-316]
  [  4.74148279e-316   4.34361042e-311]
  [  4.81748589e-316   4.34361042e-311]]
 [[  2.93185076e-316   7.79101500e-315]
  [  4.88288319e-316   4.78211988e-316]
  [  6.76676135e-315   6.76668368e-315]]]
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]
[[ 1.  0.  0.]
 [ 0.  1.  0.]
 [ 0.  0.  1.]]

ndarray的数据类型

dtype(数据类型)是一个特殊的对象,它含有ndarray将一块内存解释为特定数据类型所需的信息:

arr1 = np.array([1, 2, 3], dtype=np.float64)
arr2 = np.array([1, 2, 3], dtype=np.int32)
print(arr1.dtype)
print(arr2.dtype)

输出结果:

float64
int32

你可以通过ndarray的astype方法显式地转换其dtype:

arr = np.array([1, 2, 3, 4, 5])
print(arr.dtype)
float_arr = arr.astype(np.float64)
print(float_arr.dtype)

输出结果:

int32
float64

在本例中,整数被转换成了浮点数。如果将浮点数转换成整数,则小数部分将会被截断:

arr = np.array([3.7, -1.2, -2.6, 0.5, 12.9, 10.1])
print(arr)
print(arr.astype(np.int32))

输出结果:

[  3.7  -1.2  -2.6   0.5  12.9  10.1]
[ 3 -1 -2  0 12 10]

数组的dtype还有另外一个用法:

int_array = np.arange(10)
calibers = np.array([.22, .270, .357, .380, .44, .50], dtype=np.float64)
print(int_array.astype(calibers.dtype))

输出结果:

[ 0.  1.  2.  3.  4.  5.  6.  7.  8.  9.]

你还可以用简洁的类型代码来表示dtype:

empty_uint32 = np.empty(8, dtype='u4')
print(empty_uint32)

输出结果:

[14352383        0 14389440        0        0        0        0        0]

数组和标量之间的运算

数组很重要,因为它使你不用编写循环即可对数据执行批量运算。这通常就叫做矢量化。大小相等的数组之间的任何运算都会将运算应用到元素级:

arr = np.array([[1., 2., 3.], [4., 5., 6.]])
print(arr)
print(arr * arr)
print(arr - arr)
#同样,数组与标量的算术运算也会将那个标量值传播到各个元素:
print(1 / arr)
print(arr ** 0.5)

输出结果:

[[ 1.  2.  3.]
 [ 4.  5.  6.]]
[[  1.   4.   9.]
 [ 16.  25.  36.]]
[[ 0.  0.  0.]
 [ 0.  0.  0.]]
[[ 1.          0.5         0.33333333]
 [ 0.25        0.2         0.16666667]]
[[ 1.          1.41421356  1.73205081]
 [ 2.          2.23606798  2.44948974]]

不同大小的数组之间的运算叫做广播,我们将在第12章中对其进行详细讨论

基本的索引和切片

NumPy数组的索引是一个内容丰富的主题,因为选取数据子集或单个元素的方式有很多。一维数组很简单。从表面上看,它们跟Python列表的功能差不多:

arr=np.arange(10)
print(arr[5])
print(arr[5:8])
arr[5:8]=12
print(arr)

输出结果:

5
[5 6 7]
[ 0  1  2  3  4 12 12 12  8  9]

复制副本只能用copy()方法

arr_slice1=arr[5:8].copy()
arr_slice1[:]=64
print(arr)
arr_slice = arr[5:8]
arr_slice[:] = 64
print(arr)

输出结果:

[0 1 2 3 4 5 6 7 8 9]
[ 0  1  2  3  4 64 64 64  8  9]

递归访问和切片索引

arr2d=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr2d[0][2])
#也可以写成下面的形式
print(arr2d[0,2])
print(arr2d[:2,1:])
print(arr2d[:,:1])

输出结果:

3
3
[[2 3]
 [5 6]]
[[1]
 [4]
 [7]]

布尔型索引

来看这样一个例子,假设我们有一个用于存储数据的数组以及一个存储姓名的数组(含有重复项)。在这里,我将使用numpy.random中的randn函数生成一些正态分布的随机数据。假设每个名字都对应data数组中的一行,而我们想要选出对应于名字“Bob”的所有行。跟算术运算一样,数组的比较运算(如==)也是矢量化的。因此,对names和字符串“Bob”的比较运算将会产生一个布尔型数组:

names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
data = randn(7, 4)
print(data)
print(names=='Bob')
print(data[names=='Bob'])

输出结果:

[[ 1.7250243  -0.90324766 -0.80458208  0.58658337]
 [ 1.13815199 -0.54509708 -0.55398749  0.52387601]
 [ 1.29044203  1.16643074 -1.34865016 -0.48044707]
 [-0.12598368  1.14410135 -0.98494842  1.12368884]
 [ 0.35468068 -0.56479507 -0.81163169  0.08580436]
 [ 0.2285224  -2.07053732 -0.71711736  0.42071483]
 [-0.75537553  0.45912645  0.74415315 -1.78303911]]
[ True False False  True False False False]
[[ 1.7250243  -0.90324766 -0.80458208  0.58658337]
 [-0.12598368  1.14410135 -0.98494842  1.12368884]]

花式索引

花式索引是一个NumPy术语,它指的是利用整数数组进行索引。假设我们有一个8*4数组:

arr = np.empty((8, 4))
for i in range(8):
    arr[i] = i
print(arr)
print(arr[[4, 3, 0, 6]])

输出结果:

[[ 0.  0.  0.  0.]
 [ 1.  1.  1.  1.]
 [ 2.  2.  2.  2.]
 [ 3.  3.  3.  3.]
 [ 4.  4.  4.  4.]
 [ 5.  5.  5.  5.]
 [ 6.  6.  6.  6.]
 [ 7.  7.  7.  7.]]
[[ 4.  4.  4.  4.]
 [ 3.  3.  3.  3.]
 [ 0.  0.  0.  0.]
 [ 6.  6.  6.  6.]]

数组转置和轴对换

转置是重塑的一种特殊形式,它返回的是源数据的视图(不会进行任何复制操作)。数组不仅有transpose方法,还有一个特殊的T属性:

arr = np.arange(15).reshape((3, 5))
print(arr)
print(arr.T)
arr1=np.arange(16).reshape((2,2,4))
print(arr1)
print(arr1.transpose((1,0,2)))

输出结果:

[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
[[ 0  5 10]
 [ 1  6 11]
 [ 2  7 12]
 [ 3  8 13]
 [ 4  9 14]]

[[[ 0  1  2  3]
  [ 4  5  6  7]]
 [[ 8  9 10 11]
  [12 13 14 15]]]
[[[ 0  1  2  3]
  [ 8  9 10 11]]
 [[ 4  5  6  7]
  [12 13 14 15]]]

理解transpose()中的参数的意义,数组a的shape为(2,2,4),是一个三维数组,这个元组对应的索引为:(0,1,2),也就是a.shape的下标:(2[0], 2[1], 4[2]), []中对应的是shape元组的索引。那么,现在,通过b = a.transpose(1, 0, 2),那么b.shape就变成(2, 2, 4),这就是说transpose就是改变高维数组的形状,形状改变了,那么里面的元素自然也要重新排列。比如:元素4在a中的位置是a[0][1][1],经过b = a.transpose(1, 0, 2)之后,11在b中的位置就变成b[1][0][1]。再比如元素11,在a中的位置a[1][0][3],在b中为:a[0][1][3]。

通用函数(Universal Functions)

一元通用函数

函数说明
abs、fabs计算整数、浮点数或复数的绝对值。对于非复数值,可以使用更快的fabs
sqrt计算各元素的平方根。相当于arr**0.5
square计算各元素的平方。相当于arr**2
exp计算各元素的指数e^x
log、log10、log2、log1p分别为自然对数(底数为e)、底数为10的log、底数为2的log、log(1+x)
sign计算各元素的正负号:1(正数)、0(零)、-1(负数)
ceil计算各元素的ceiling值,即大于等于该值的最小整数
floorfloor值,即小于等于该值的最大整数
rint四舍五入,保留dtype
modf将数组的小数和整数部分以两个独立数组形式返回
isnan返回一个表示是否为空的数组
isfinite、isinf返回一个表示是否有限或是否无穷的数组
cos、cosh、sin、sinh、tan、tanh普通型和双曲型三角函数
arccos、arccosh、arcsin、arcsinh、arctan、arctanh反三角函数
logical_not计算个元素not x的真值。相当于 -arr

二元通用函数

函数说明
add元素加
subtract元素减
multiply元素乘
divide/floor_divide元素除/元素向下整除
power第一个元素A,第二个元素B,则表示计算A的B次方
maximum/fmax元素级最大值/抛弃NAN
minimum/fmin元素级最小值/抛弃NAN
mod元素级求模
greater、greater_equal、less、less_equal、equal、not_equal执行元素级别的比较运算,最终产生布尔型数组,>、>=、<、<=、==、!=

利用数组进行数据处理

meshgrid函数,np.arange(-1, 1, 0.01)变成了矩阵x的行向量,np.arange(-1, 1, 0.01)变成了矩阵y的列向量

x, y = np.meshgrid(np.arange(-1, 1, 0.01), np.arange(-1, 1, 0.01))
print(x)
print(y)

输出结果:

[[-1.   -0.99 -0.98 ...,  0.97  0.98  0.99]
 [-1.   -0.99 -0.98 ...,  0.97  0.98  0.99]
 [-1.   -0.99 -0.98 ...,  0.97  0.98  0.99]
 ..., 
 [-1.   -0.99 -0.98 ...,  0.97  0.98  0.99]
 [-1.   -0.99 -0.98 ...,  0.97  0.98  0.99]
 [-1.   -0.99 -0.98 ...,  0.97  0.98  0.99]]
[[-1.   -1.   -1.   ..., -1.   -1.   -1.  ]
 [-0.99 -0.99 -0.99 ..., -0.99 -0.99 -0.99]
 [-0.98 -0.98 -0.98 ..., -0.98 -0.98 -0.98]
 ..., 
 [ 0.97  0.97  0.97 ...,  0.97  0.97  0.97]
 [ 0.98  0.98  0.98 ...,  0.98  0.98  0.98]
 [ 0.99  0.99  0.99 ...,  0.99  0.99  0.99]]

将条件逻辑表述为数组运算

xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
cond = np.array([True, False, True, True, False])

result=[(x if c else y) for x,y,c in zip(xarr,yarr,cond)]
print(result)
#用np.where将更加简洁
result1=np.where(cond,xarr,yarr)
print(result1)

输出结果:

[1.1000000000000001, 2.2000000000000002, 1.3, 1.3999999999999999, 2.5]
[ 1.1  2.2  1.3  1.4  2.5]

np.where的第二个和第三个参数不必是数组,它们都可以是标量值。在数据分析工作中,where通常用于根据另一个数组而产生一个新的数组。假设有一个由随机数据组成的矩阵,你希望将所有正值替换为2,将所有负值替换为-2。若利用np.where,则会非常简单:

arr = randn(4, 4)
print(arr)
#将正值设置为2,负值设置为-2
print(np.where(arr > 0, 2, -2))
#只将正值设置为2
print(np.where(arr > 0, 2, arr))

输出结果:

[[-0.73105396 -0.78999342  0.41619064  0.15435376]
 [-0.72645598 -1.54292098 -0.12804657  0.08311469]
 [ 0.54339172 -0.24310633  0.30142777  0.70569636]
 [-0.30168264 -0.12709612 -0.98928312  0.57834097]]
[[-2 -2  2  2]
 [-2 -2 -2  2]
 [ 2 -2  2  2]
 [-2 -2 -2  2]]
[[-0.73105396 -0.78999342  2.          2.        ]
 [-0.72645598 -1.54292098 -0.12804657  2.        ]
 [ 2.         -0.24310633  2.          2.        ]
 [-0.30168264 -0.12709612 -0.98928312  2.        ]]

数学和统计方法

可以通过数组上的一组数学函数对整个数组或某个轴向的数据进行统计计算。

arr = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
print(arr)
print(arr.cumsum(0))
print(arr.cumsum(1))

输出结果

[[0 1 2]
 [3 4 5]
 [6 7 8]]
[[ 0  1  2]
 [ 3  5  7]
 [ 9 12 15]]
[[ 0  1  3]
 [ 3  7 12]
 [ 6 13 21]]

基本数组统计方法

方法说明
sum对数组中全部或者某轴向的元素求和。
mean算术平均数
std、var标准差和方差,自由度可调
min、max最大值和最小值
argmin、argmax分别为最大和最小元素的索引
cumsum所有元素的累计和,参数0表示列,参数1表示行
cumprod所有元素的累计积,参数0表示列,参数1表示行

用于布尔型数组的方法

在上面这些方法中,布尔值会被强制转换为1(True)和0(False)。因此,sum经常被用来对布尔型数组中的True值计数:

arr = randn(100)
print((arr > 0).sum())
#any用于测试数组中是否存在一个或多个True,而all则检查数组中所有值是否都是True
bools = np.array([False, False, True, False])
print(bools.any())
print(bools.all())

输出结果:

49
True
False

排序

跟Python内置的列表类型一样,NumPy数组也可以通过sort方法就地排序:

arr = randn(8)
arr.sort()
print(arr)

输出结果:

[-2.00572783 -0.76284135 -0.64955149 -0.17702569 -0.13612327  0.26842501  0.78287524  1.02383655]

唯一化以及其他的集合逻辑

Numpy提供了一些针对一维ndarray的基本集合运算。最常用的可能要数np.unique了,它用于找出数组中的唯一值并返回已排序额结果:

names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
ints = np.array([3, 3, 3, 2, 2, 1, 1, 4, 4])
print(np.unique(names))
print(np.unique(ints))
#np.inld用于测试一个数组中的值在另一个数组中的成员资格,返回一个布尔型数组:
values = np.array([6, 0, 0, 3, 2, 5, 6])
print(np.in1d(values, [2, 3, 6]))

输出结果:

['Bob' 'Joe' 'Will']
[1 2 3 4]
[ True False False  True  True False  True]

最后就是随机数的常用函数,都罗列在下面了:

函数说明
seed确定随机数生成器的种子
permutation返回一个序列的随机排列或返回一个随机排列的范围
shuffle对一个序列就地随机排列
rand产生均匀分布的样本值
randint从给定的上下限范围内随机选取整数
randn产生正态分布(均值为0,方差为1)的样本值
binomial产生二项分布的样本值
normal产生正太分布的样本值
beta产生Beta分布的样本值
chisquare产生卡方分布的样本值
gamma产生Gamma分布的样本值
uniform产生再[0,1)中均匀分布的样本值

至此,我们numpy部分的内容就结束了

Zemax实战:5步搞定牛顿望远镜光学设计(附球差优化技巧) 本文详细介绍了在Zemax OpticStudio中构建高精度牛顿望远镜光学系统的5步实战流程,包括初始参数设置、球差优化、折叠镜与遮光面配置等关键步骤。特别针对球差问题,提供了将主镜圆锥系数设为-1的优化方案,有效消除轴上弥散斑。通过3D视图和MTF分析验证,该系统可实现接近衍射极限的成像质量,适合天文观测等应用场景。 阅读详情

相关推荐

Python3 ACM模式输入输出全攻略:从牛客网到华为机试的实战技巧

本文详细解析了Python3在ACM模式下的输入输出处理技巧,针对牛客网、华为机试等在线评测系统。文章从input()函数本质出发,总结了六种高频输入模式的处理模板,并提供了链表、二叉树等数据结构的I/O实战方案,最后给出性能优化与常见避坑指南,帮助开发者高效应对算法笔试。

zero1的博客 998

python打卡day4

打开数据(csv文件、excel文件)查看数据(尺寸信息、查看列名等方法)补全信贷数据集中的数值型缺失值。利用循环补全所有列的空值。众数、中位数填补空值。

qq_47910226的博客 434

MediaPipe实战:从零构建人脸关键点检测应用

本文详细介绍了如何使用Google的MediaPipe框架从零构建一个实时人脸关键点检测应用。文章深入剖析了MediaPipe的三段式检测流水线,提供了Android平台的完整实战教程,包括环境配置、模型加载、摄像头集成、关键点绘制以及性能调优指南,帮助开发者快速实现高效、跨平台的人脸AR特效与交互功能。

weixin_29100927的博客 343

python:利用json保存和读取数据

引言 实际项目中,往往需要保存数据到本地,以便后续查看和复用。 一种思路是将数据保存为json格式,它适用于:待保存的数据主要是python的原生数据类型(Int, double, str, list, tuple, dict等) 保存数据 code import json dictObj = { 'name': 'zhuang', 'state': 'exciting', 'data': [1,2,3,4,5]

碧海蓝天 4219

如何加载交易策略EA到MT4/MT5

1、打开MT4/MT5软件 2、首先,必须有一个EA,而且必须是mq4/ex4为扩展名。点击左上角“文件”—“打开数据文件夹”,找到安装路径 3、将EA的ex4或mq4文件放到MT4目录\MQL4\Experts里面(本文以名为Demo的EA为例) 4、如果有DLL库文件,复制到experts目录下的libraries子目录中 5、如果有tpl模板文件,复制到templates目录中 6、添加完成后重启MT4,点击允许EA运行图标 7、在导航中找到刚才安装的EA,拖拽到...

weixin_41364817的博客 7362

语义通信高斯信道仿真代码

【代码】语义通信高斯信道仿真代码。

一去不复返的通信er 427

Java核心技术卷一基础知识第10版-第3章 Java的基本程序设计结构

第3章 Java的基本程序设计结构 public class FirstSample { public static void main(String[] args) { System.out.println("We will not use 'Hello, World! "') ; } } 关键字public 称为访问修饰符( access modifier ), 这些修饰符用于控制程序的其他部分对这段代码的访问级別 System.out.println中的点号( • )用于调用方法。J.

renxanshou的博客 284

Kalibr标定避坑指南:如何用AprilGrid板快速完成双目IMU标定

本文详细介绍了使用AprilGrid板进行Kalibr双目IMU联合标定的实战技巧,包括标定工具选型、数据采集优化、标定流程及结果验证。通过AprilGrid板的唯一标识性和抗遮挡优势,结合IMU静止标定和运动激励设计,显著提升标定精度。文章还提供了常见报错处理和高级优化技巧,帮助开发者高效完成传感器标定。

sunny的博客 282

Python读写JSON的操作及JSON与Numpy数组的存储与读取

JSON基本操作 内容有空补上 JSON与Numpy数组的读写操作 Python字典可以存储ndarray数组类型,但是由dict序列化为JSON文件时,无法序列化ndarray类型,为了实现读写numpy数组,需要重写JSONEncoder的default方法,基本原理也就是先把ndarray转化为list,然后后续读取再从list转化为ndarray。 import json import numpy as np # 重写JSONEncoder中的default方法 class NumpyArray

weixin_43167168的博客 7550

uniapp [全端兼容] - 实现内网使用天地图离线地图,详解项目加载天地图的离线地图服务器部署与使用教程示例源码,Uniapp如何实现天地图的离线加载部署在内网访问(兼容H5、微信小程序、App)

uniapp天地图如何离线访问,无需网络调用天地图API,天地图离线地图,天地图——内网使用离线地图,uniapp中加载天地图的离线地图,uniAPP实现天地图离线访问,在内网中无法直接使用外网天地图资源怎么办,在uni-app中加载地图 -使用天地图的瓦片数据。UNIAPP天地图离线怎么使用,内网部署天地图,天地图离线瓦片,部分瓦片数据,天地图如何离线,下载天地图离线服务,并用Uniapp+天地图离线部署,天地图私有化部署,实现离线加载天地图,Java+uniapp天地图离线开发,uniapp项目中无网络

🏆 前端领域优质创作者 4904

【异常】解决 Claude Code 及第三方插件提示 “API Error: 404“ 的配置修复指南

在使用 Claude 相关的 CLI 工具(如)或 IDE 插件进行开发辅助时,配置错误的模型参数是导致连接失败的常见原因。本文将针对这一典型报错进行复盘与解决。

奶爸的编程之路,也就一周冷个三天 7747

np array 存储 json格式文件的写入与读取

Python中提供了list容器,可以当作数组使用。但列表中的元素可以是任何对象,因此列表中保存的是对象的指针,这样一来,为了保存一个简单的列表[1,2,3]。就需要三个指针和三个整数对象。对于数值运算来说,这种结构显然不够高效。 Python虽然也提供了array模块,但其只支持一维数组,不支持多维数组(在TensorFlow里面偏向于矩阵理解),也没有各种运算函数。因而不适合数值运算。 NumPy的出现弥补了这些不足。 (——摘自张若愚的《Python科学计算》) 而经.

weixin_43134049的博客 8655

从原理到实战:深入解析 Synopsys VCS 仿真快照技术,提升验证效率

VCS Checkpoint 技术摘要 VCS Checkpoint 是 Synopsys VCS 提供的仿真状态快照功能,可将完整的仿真状态(寄存器、存储器、时钟、随机种子等)序列化保存。主要应用场景包括:跳过耗时初始化阶段、覆盖率驱动验证、Debug复现和UVM分阶段验证。核心原理是对仿真内核状态的完整序列化,需注意文件句柄等特殊对象需手动处理。 使用方式: 编译时添加 -checkpoint 选项 运行时通过 $save 系统任务或 +checkpoint 参数保存状态 通过 +restore 参数恢

元直的博客 248

阅读笔记:利用Python进行数据分析第2版——第4章 Numpy基础:数组和矢量计算

大小相等的数组之间的任何算术运算都会将运算应用到元素级。 数组与标量的算术运算会将标量值传播到各个元素。 大小相同的数组之间的比较会生成布尔值数组。 不同大小的数组之间的运算叫做广播( broadcasting),当你将一个标量值赋值给一个切片时( 如arr[5:8]=12),该值会自动传播( 也就说后面将会讲到的“广播”)到整个选区。 跟列表最重要的区别在于,数组切片是原始数组的视图。 这意味着数据不会被复制,视图上的任何修改都会直接反映到源数组上。 如果你想要得到的是ndarray切片的一份副本而非视.

明月清風 1485

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【利用python进行数据分析】学习笔记-第4章 NumPy基础

第4章 NumPy基础:数组和矢量运算 引用惯例:import numpy as np 基于NumPy的算法要比纯python快10到100倍(甚至更快),并且使用更少的内存。 4.1NumPy的ndarray:一种多维数组对象 ndarray是一个通用的同构数据多维容器,即其中的元素必须是相同类型的。每个数组都有⼀个shape(⼀个表示各维度⼤⼩的元组)和⼀个dtype(⼀个⽤于说明数组数据类型的对象) 4.1.1 创建ndarray 使⽤array函数:接受⼀切序列型的对象(包括其他数组),然后

qq_51283283的博客 585

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

利用Python进行数据分析(第三版)--第4章Numpy基础

NumPy是Python数值计算中最重要的基础包之一,其被设计为可以高效的处理大型数组的数据基于Numpy的算法要比纯Python算法快10-100倍,且使用的内存更少。

qq_20785319的博客 757

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

《利用Python进行数据分析》学习笔记 第4章 NumPy基础:数组和矢量计算

第4章 NumPy基础:数组和矢量计算 NumPy(Numerical Python的简称)是Python数值计算最重要的基础包。大多数提供科学计算的包都是用NumPy的数组作为构建基础。 NumPy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操...

jasonzhang0105的博客 652

《利用Python进行数据分析·第2版》第4章 NumPy基础:数组和矢量计算

《利用 Python 进行数据分析 · 第 2 版》第 4 章 NumPy 基础:数组和矢量计算第 1 章 准备工作第 2 章 Python 语法基础,IPython 和 Jupyter第 3 章 Python 的数据结构、函数和文件第 4 章 NumPy 基础:数组和矢量计算第 5 章 pandas 入门第 6 章 数据加载、存储与文件格式第 7 章 数据清洗和准备第 8 章 数据规整:聚合、合...

网络安全领域优质创作者 2620

《利用Python进行数据分析》学习笔记 — 第4章 NumPy基础:数组和矢量运算

第二遍看这本书了,中间隔了很久。说来惭愧,近一年来很少写代码,今天算是一个新的开始吧,立个flag,每周至少要写一篇博客。 因为之前已经看过一遍,也有写过一些代码,所以,一些简单的、已经很熟悉的点就不总结了,只写下这次看了之后有了更深的理解或者觉得很有用的点。 查看数组的数据类型 arr = np.array([[1, 5, 6, 7], [2, 6, 7, 9]]) arr.dtype 输出结果:dtype(‘int32’) 另外,我想到了type的用法: arr = np.array([[1, 5

今天写代码了吗 356

《利用Python进行数据分析》笔记---第4章NumPy基础:数组和矢量计算

写在前面的话:实例中的所有数据都是在GitHub上下载的,打包下载即可。 地址是:http://github.com/pydata/pydata-book还有一定要说明的:我使用的是Python2.7,书中的代码有一些有错误,我使用自己的2.7版本调通。# coding: utf-8 import numpy as npdata1 = [6.,7.5,8.,0.,1.] arr1 = np.ar

wangshuang1631的博客 4105

利用Python进行数据分析 第4章 NumPy基础-数组与向量化计算(1)

1. NumPy简介 NumPy是Python数值计算最重要的基础包,大多数提供科学计算的包都是用NumPy作为基础。 NumPy功能如下:(1)ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。          (2)用于对整组数据进行快速运算的标注数学函数(无需编写循环)。          (3)用于读写磁盘数据的工具,以及用于操作内存映射文件...

weixin_38170862的博客 327

[利用python进行数据分析 书笔记]第4章 NumPy基础:数组和矢量计算

NumPy的ndarray:一种多维数组对象创建ndarraydata.shape 表示各维度大小的元组 data.dtype 表示数组数据类型 data.ndim 返回维数 ndarray的数据类型astype 显式地转换其dtype,会创建一个新的数组(一份拷贝)数组和表量之间的运算两数组之间直接使用+、-、*、/基本的索引和切片arr[5:8] 数组切片是原始数组的视图(数据不会被...

Daisy_fight的博客 402

《利用Python进行数据分析·第2版》第4章 NumPy基础:数组和矢量计算个人重点

目录 目录 4.1 NumPy的ndarray:一种多维数组对象 创建ndarray ndarray的数据类型 NumPy数组的运算 基本的索引和切片 切片索引 布尔型索引 数组转置和轴对换 4.2 通用函数:快速的元素级数组函数 4.3 利用数组进行数据处理 将条件逻辑表述为数组运算 数学和统计方法 用于布尔型数组的方法 排序 唯一化以及其它的集合逻辑 4.4 用于数组的文件输入输...

m0_38007995的博客 798

利用Python进行数据分析(2):第4章,关于numpy的技巧

np.array取元素,索引第几行A[i, j]按行取按列取按元素取按元素取(有种kron的感觉,目前不知道这种操作的专业术语叫什么……)数组的集合运算随机数生成samples = np.random.normal(size=(4, 4)) samples比一个个地用自带的random生成要快。关于range、xrange随机游走的首达概率1维随机游走+1,-1通过0-1分布的累加,可以表示质点当...

qcyfred的博客 355

《利用Python进行数据分析·第2版》第4章 NumPy基础:数组和矢量计算(1)

4.1 NumPy的ndarray:一种多维数组对象 NumPy最重要的一个特点就是其N维数组对象(即ndarray),该对象是一个快速而灵活的大数据集容器。你可以利用这种数组对整块数据执行一些数学运算,其语法跟标量元素之间的运算一样。 ndarray是一个通用的同构数据多维容器,也就是说,其中的所有元素必须是相同类型的。每个数组都有一个shape(一个表示各维度大小的元组)和一个dtype(...

zhaocen_1230的博客 979
上一篇: 借助Kesci的K-Lab平台进行Iris数据分析
下一篇: 【NLP】如何理解n-gram模型
yeverwen
博客等级 码龄14年 116粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值