numpy中怎么把俩个矩阵numpy 连接两个矩阵成一个

如何用python numpy产生一个正太分布随机数的向量或者矩阵?-中国学网-中国IT综合门户网站
如何用python numpy产生一个正太分布随机数的向量或者矩阵?
来源:互联网 发表时间: 8:24:06 责任编辑:李志喜字体:
本内容来自互联网,有网友碰到如何用python numpy产生一个正太分布随机数的向量或者矩阵?,具体问题为:现在用了两个循环,每个数都这么写,现在太慢了,如何能直接产生向量或者矩阵呢def mc_return(npaths,ndays): mmreturn=DataFrame(np.zeros([npaths,ndays])) for i in range(npaths): for j in range(ndays): print np.exp(stats.norm.ppf(np.random.rand(),loc=0.07 / 250, scale=0.2 / np.sqrt(250)))-1 mmreturn.iloc[i,j]=np.exp(stats.norm.ppf(np.random.rand(),loc=0.07 / 250, scale=0.2 / np.sqrt(250)))-1 return mmreturn我们通过互联网以及本网其他用户共同努力为此问题提供了相关答案,以便碰到此类问题的网友参考学习,请注意,我们不能保证答案的准确性,仅供参考,具体如下:(注意:本网只是整理不享有版权及不承担相关可能的其他责任,版权归原作者原网站所有,本网仅为了知识传播.)======以下答案可供参考======供参考答案1:
numpy.random.normal(size=100)
numpy.random.normal(size=(10, 10))
供参考答案2:
供参考答案3:
如果是标准正态分布,np.random.randn(n, m)
相关信息 [
相关文章:
最新添加资讯
24小时热门资讯
Copyright © 2004- All Rights Reserved. 中国学网 版权所有
京ICP备号-1 京公网安备02号numpy(4)
转载地址:
Python使用NumPy包完成了对N-维数组的快速便捷操作。使用这个包,需要导入numpy。 SciPy包以NumPy包为基础,大大的扩展了numpy的能力。为了使用的方便,scipy包在最外层名字空间中包括了所有的numpy内容,因此只要导入了scipy,不必在单独导入numpy了!但是为了明确哪些是numpy中实现的,哪些是scipy中实现的,本文还是进行了区分。以下默认已经:import numpy as
np 以及 impor scipy as sp
下面简要介绍Python和MATLAB处理数学问题的几个不同点。1.MATLAB的基本是矩阵,而numpy的基本类型是多为数组,把matrix看做是array的子类。2.MATLAB的索引从1开始,而numpy从0开始。
1.建立矩阵
a1=np.array([1,2,3],dtype=int)&&&#建立一个一维数组,数据类型是int。也可以不指定数据类型,使用默认。几乎所有的数组建立函数都可以指定数据类型,即dtype的取值。
a2=np.array([[1,2,3],[2,3,4]])&&&#建立一个二维数组。此处和MATLAB的二维数组(矩阵)的建立有很大差别。
同样,numpy中也有很多内置的特殊矩阵:
b1=np.zeros((2,3))&&&&#生成一个2行3列的全0矩阵。注意,参数是一个tuple:(2,3),所以有两个括号。完整的形式为:zeros(shape,dtype=)。相同的结构,有ones()建立全1矩阵。empty()建立一个空矩阵,使用内存中的随机值来填充这个矩阵。
b2=identity(n)&&&#建立n*n的单位阵,这只能是一个方阵。
b3=eye(N,M=None,k=0)&&&&#建立一个对角线是1其余值为0的矩阵,用k指定对角线的位置。M默认None。
此外,numpy中还提供了几个like函数,即按照某一个已知的数组的规模(几行几列)建立同样规模的特殊数组。这样的函数有zeros_like()、empty_like()、ones_like(),它们的参数均为如此形式:zeros_like(a,dtype=),其中,a是一个已知的数组。
c1=np.arange(2,3,0.1)&&&#起点,终点,步长值。含起点值,不含终点值。
c2=np.linspace(1,4,10)&&&&#起点,终点,区间内点数。起点终点均包括在内。同理,有logspace()函数
d1=panion(a)&&&&#伴随矩阵
d2=np.linalg.triu()/tril()&&&#作用同MATLAB中的同名函数
e1=np.random.rand(3,2)&&&&#产生一个3行2列的随机数组。同一空间下,有randn()/randint()等多个随机函数
fliplr()/flipud()/rot90()&&&&#功能类似MATLAB同名函数。
xx=np.roll(x,2)&&&#roll()是循环移位函数。此调用表示向右循环移动2位。
2.数组的特征信息
先假设已经存在一个N维数组X了,那么可以得到X的一些属性,这些属性可以在输入X和一个.之后,按tab键查看提示。这里明显看到了Python面向对象的特征。
X.flags&&&&#数组的存储情况信息。
X.shape&&&&#结果是一个tuple,返回本数组的行数、列数、……
X.ndim&&&#数组的维数,结果是一个数
X.size&&&&#数组中元素的数量
X.itemsize&&&&#数组中的数据项的所占内存空间大小
X.dtype&&&&#数据类型
X.T&&&#如果X是矩阵,发挥的是X的转置矩阵
X.trace()&&&&#计算X的迹
np.linalg.det(a)&&&#返回的是矩阵a的行列式
np.linalg.norm(a,ord=None)&&&&#计算矩阵a的范数
np.linalg.eig(a)&&&&#矩阵a的特征值和特征向量
np.linalg.cond(a,p=None)&&&&#矩阵a的条件数
np.linalg.inv(a)&&&&#矩阵a的逆矩阵
3.矩阵分解
常见的矩阵分解函数,numpy.linalg均已经提供。比如cholesky()/qr()/svd()/lu()/schur()等。某些算法为了方便计算或者针对不同的特殊情况,还给出了多种调用形式,以便得到最佳结果。
4.矩阵运算
np.dot(a,b)用来计算数组的点积;vdot(a,b)专门计算矢量的点积,和dot()的区别在于对complex数据类型的处理不一样;innner(a,b)用来计算内积;outer(a,b)计算外积。
专门处理矩阵的数学函数在numpy的子包linalg中定义。比如 np.linalg.logm(A)计算矩阵A的对数。可见,这个处理和MATLAB是类似的,使用一个m后缀表示是矩阵的运算。在这个空间内可以使用的有cosm()/sinm()/signm()/sqrtm()等。其中常规exp()对应有三种矩阵形式:expm()使用Pade近似算法、 expm2()使用特征值分析算法、expm3()使用泰勒级数算法。在numpy中,也有一个计算矩阵的函数:funm(A,func)。
numpy中的数组索引形式和Python是一致的。如:
x=np.arange(10)
print x[2]&&&&#单个元素,从前往后正向索引。注意下标是从0开始的。
print x[-2]&&&&#从后往前索引。最后一个元素的下标是-1
print x[2:5]&&&&#多个元素,左闭右开,默认步长值是1
print x[:-7]&&&&#多个元素,从后向前,制定了结束的位置,使用默认步长值
print x[1:7:2]&&&#指定步长值
x.shape=(2,5)&&&&#x的shape属性被重新赋值,要求就是元素个数不变。2*5=10
print x[1,3]&&&&#二维数组索引单个元素,第2行第4列的那个元素
print x[0]&&&#第一行所有的元素
y=np.arange(35).reshape(5,7)&&&&#reshape()函数用于改变数组的维度
print y[1:5:2,::2]&&&&#选择二维数组中的某些符合条件的元素
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:20927次
排名:千里之外
原创:25篇
(3)(1)(1)(1)(1)(7)(6)(2)(6)python 科学计算学习一:numpy快速处理数据(2) - 推酷
python 科学计算学习一:numpy快速处理数据(2)
1,像c语言中的struct一样构造结构类型:&&
& 1 import numpy as np
& 2 mytype=np.dtype({'name':['name','age','weight'],'formats':['s32','i', & &'f']},align=True)
& 3 a=np.array([('zhang',32,75.5),('wang',24,65.2)],dtype=mytype)
2,numpy中的数据存储类型是C语言的格式,第0轴是最上位。也可以是Fortan语言格式,第0轴是最下位;通过数组的flags属性就可以查看数据存储区域的属性:
&&& a=np.array([[1,2],[2,3],[2,3]])
&&& a.flags
& C_CONTIGUOUS : True
& F_CONTIGUOUS : False
& OWNDATA : True
& WRITEABLE : True
& ALIGNED : True
& UPDATEIFCOPY : False
就是a的转置了。但是并不改变a原来的数值;
4,numpy内部 的函数对于大量数据的计算速度高于python本身的math库里面的函数;下面的例子比较他们的速度:
1 import numpy as np
& 2 import time
& 3 import math
& 5 x=[i*0.001 for i in xrange(1000000)]
& 6 start=time.clock()
& 7 for i,t in enumerate(x):
& 8 & & x[i]=math.sin(t)
& 9 print &math.sin:&,time.clock()-start
&12 x=[i*0.001 for i in xrange(1000000)]
&13 x=np.array(x)
&14 start=time.clock()
&15 np.sin(x)
&16 print &numpy.sin:&,time.clock()-start
&19 x=[i*0.001 for i in xrange(1000000)]
&20 start=time.clock()
&21 for i,t in enumerate(x):
&22 & & x[i]=np.sin(t)
&24 print &numpy.sin loop:&,time.clock()-start
得到的结果:
math.sin: 0.29
numpy.sin: 0.04
numpy.sin loop: 2.12
5,数组中可以进行四则运算,逻辑运算;在进行四则运算的时候shape很重要,举例说明。
array([0, 1, 2, 3, 4])
&&& b=np.arange(1,5)
array([1, 2, 3, 4])
Traceback (most recent call last):
& File &&stdin&&, line 1, in &module&
ValueError: operands could not be broadcast together with shapes (5) (4)&
&&& b=np.arange(1,6)
array([1, 3, 5, 7, 9])
&&& c=a.reshape(-1,1)
&&& c.shape
array([[1, 2, 3, 4, 5],
& & & &[2, 3, 4, 5, 6],
& & & &[3, 4, 5, 6, 7],
& & & &[4, 5, 6, 7, 8],
& & & &[5, 6, 7, 8, 9]])
&&& a=np.array([[1,2,3,4,5]])
&&& a.shape
&&& b.shape
array([[ 2, &4, &6, &8, 10]]) &
注意:上面的例子没有说明的,数值就是原来的,没有变。比较上面知道,基本上横向量和列向量是可以任意加减的。但是其他的要有一样的shape才可以。
6,可自定义分段函数,也可以用where(),或者是select()来表示(很像C语言里面的 condition?a:b,判断条件是否正确,正确则执行a,否则b)。具体例子:
&&& x=np.arange(10)
&&& np.where(x&5,9-x,x)
array([9, 8, 7, 6, 5, 5, 6, 7, 8, 9]) 表示的是产生一个数组0~9,然后得到另一个数组,这个数组满足:当
x&5的时候它的值变为9-x,否则保持为x)。
&&& np.select([x&2,x&6,True],[7-x,x,2*x])
array([ 7, &6, &4, &6, &8, 10, 12, &7, &8, &9]) 表示的是当x满足第一个条件时,执行
7-x,当x满足第二个条件事执行x,
当二者都不满足
的时候执行2*x。
两个都比较耗内存,所以引入piecewise(),因为它只有在满足条件的时候才计算。
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
&&& np.piecewise(x,[x&2,x&6],[7-x,x,2*x])
array([7, 6, 0, 2, 4, 6, 8, 0, 1, 2]) & & 我也不太清楚???
7,随机生成数组:np.random.rand(10)随机生成一个
10个值(值的大小为0~1)的
维数组, &&
np.random.rand(10,10)
随机生成一个
10*10(值的大小为0~1)的
p.random.randint(1,10,size=(4,5))
随机生成一个
4*5(值的大小为1~10)的
用 b = arange(20).reshape(4,5) 也可以达到这个效果。
8,a.repeat(6,axis=0)表示的是将a按照第一轴的方向扩展6次得到的数组。
axis=0表示的是按照第一轴的方向操作,也就是列方向上;若是axis=1就是行方向上面;这个也是等价于axis=-1的。因为-1表示的是它的最后那个轴方向。所以也就是行方向上面。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致

我要回帖

更多关于 numpy 连接两个矩阵 的文章

 

随机推荐