Numpy-创建数组

来源:互联网 发布:exe反编译成源码 编辑:程序博客网 时间:2024/06/08 04:14

2017/7/1

******************************************************

#coding=utf-8
import numpy as np

#创建数组
a = np.array([1,2,3,4])
b = np.array([5,6,7,8])
c = np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]])

#print a
#print b
#print c

#print a.shape
#print c.shape

#使用shape指定第一个维数,第二个维数设置为-1,则矩阵会随着本来矩阵发生改变
c.shape = 2,-1
#print c

#直接指定维数,可是使用reshape
d = a.reshape((2,2))
#print d
#数组d和a共享数据存储空间,因此任意改变一个数组的元素,另一个也会发生改变
a[1] = 100
#print d

#数组的元素类型可以通过dtype属性获得
#print c.dtype

#还可以通过dtype参数在创建数组时指定元素的类型
#注意:float是64bit的双精度浮点类型,complex是128bit的双精度复数类型
#print np.array([1,2,3,4],dtype=np.float)
#print np.array([1,2,3,4],dtype=np.complex)
#[ 1.+0.j  2.+0.j  3.+0.j  4.+0.j]

#Numpy中的数据类型都有几种字符串表示形式,字符串和类型之间的对应关系都存在在typeDict字典中,d,double,float64都表示双精度浮点类型
#typeDict

#print np.typeDict['d']
#print np.typeDict['double']
#print np.typeDict['float64']
#<type 'numpy.float64'>
#<type 'numpy.float64'>
#<type 'numpy.float64'>

#完整的类型列表可以通过下面的语句得到

#print set(np.typeDict.values())
#set([<type 'numpy.timedelta64'>, <type 'numpy.float16'>, <type 'numpy.uint8'>, <type 'numpy.int8'>, <type 'numpy.object_'>, <type 'numpy.datetime64'>, <type 'numpy.uint64'>, <type 'numpy.int64'>, <type 'numpy.void'>, <type 'numpy.complex256'>, <type 'numpy.float128'>, <type 'numpy.uint64'>, <type 'numpy.int64'>, <type 'numpy.unicode_'>, <type 'numpy.complex128'>, <type 'numpy.float64'>, <type 'numpy.uint32'>, <type 'numpy.int32'>, <type 'numpy.string_'>, <type 'numpy.complex64'>, <type 'numpy.float32'>, <type 'numpy.uint16'>, <type 'numpy.int16'>, <type 'numpy.bool_'>])

#上面的例子,都是通过python创建一个序列对象,然后通过array()将其转换成数组,效率不高
#arange()类似于内置函数range(),通过指定初始值,终值,步长创建表示等差数列的一组数组
#print np.arange(0,1,0.1)#不包含1/[ 0.   0.1  0.2  0.3  0.4  0.5  0.6  0.7  0.8  0.9]

#linspace()通过指定开始值,终值和元素的个数创建等差数列,可以通过endpoint指定是否包含最后终值,默认True
#print np.linspace(0,1,10)
#print np.linspace(0,1,10,endpoint=False)
#[ 0.          0.11111111  0.22222222  0.33333333  0.44444444  0.55555556   0.66666667  0.77777778  0.88888889  1.        ]
#[ 0.   0.1  0.2  0.3  0.4  0.5  0.6  0.7  0.8  0.9]


#logspace同linspace一样,不过创建的是等比数列
#下面的等比数列表示10^0,到10^2之间的等比数列,默认是以10为底,可以通过参数base设置我们想要的参数,endpoint设置是否包含最后一个元素
#print np.logspace(0,2,5)
#[   1.            3.16227766   10.           31.6227766   100.        ]
#print np.logspace(0,1,12,base=2,endpoint=False)
#[ 1.          1.05946309  1.12246205  1.18920712  1.25992105  1.33483985   1.41421356  1.49830708  1.58740105  1.68179283  1.78179744  1.88774863]

#zeros() ones() empty()可以创建指定形状和类型的数组
#empty()仅仅分配数组所使用的内存,不对元素进行初始化操作,速度最快
#print np.empty((2,3),np.int)#只分内存,不进行初始化,指定形状为2,3的整形数组
#[[140677149604808        25322960               0]
# [              0               0               0]]

#ones()是将所有的元素初始化为0,ones()是将所有的元素初始化为1
#print np.ones(4, np.float)
#此外,zeros_like(),ones_like(),empty_like()等函数可创建与参数数组的形状和类型相同的数组
#zero_like(a),是于zeros(a.shape,a.dtype)相同效果的数组
#使用fromebuffer().fromestring(),fromfile()等函数可以从字节序列或者文件创建数组


#使用fromfunction()可以通过此函数创建数组
#def func(i):
#    return i%4+1

#print np.fromfunction(func,(10,))
#对于fromefunction()函数的第一个参数是为了计算每个数组元素的函数,第二个参数指定数组的形状。
#支持多维数组,所以第二个数组必须是一个序列
def func2(i,j):
    return (i+1)*(j+1)

print np.fromfunction(func2,(9,9))

原创粉丝点击