python基础

1.两种方法创建二维数组 :
[ 10 11 12
20 21 22
30 31 32 ]
代码:

#!/usr/bin/python

import numpy as np
import matplotlib as mlp
import matplotlib.pyplot as plt
if __name__ == '__main__':
    a = np.array([[10,11,12],[20,21,22],[30,31,32]])
    b = np.arange(10,40,10).reshape(-1,1)+np.arange(0,3,1)
    print a
    print b

解释:其中 a,b分别代表了一种方法,a直接输出其中的元素,b为一个横向量与一个列向量相加。
numpy中的array要比python原有的list()性能更好,且list中的元素不能为浮点型,只能为int型。

2.创造一个横向量[2,3,4,5,6],改变其维度为2行3列,查看向量的类型,查看向量中元素的类型,并且改变元素的类型。
代码:

#!/usr/bin/python

import numpy as np
import matplotlib as mlt
import matplotlib.pyplot as plt

if __name__ == '__main__':
    a = np.arange(1,7,1)
    b = a.reshape(2,3)
    print a, type(a), a.dtype
    print b, type(b), b.dtype
    print b.astype(np.float).dtype

解释:np.arange(1,7,1)为步长为1,从1到7生成6个数,即左闭右开,步长为1从1到7生成一个数列。reshape(2,3)重新设定数组的维度。type()为查看变量的类型。dtype为数组中元素的类型。astype为重新设定数组中元素的类型。

3.创建复数数组。
代码:

#!/usr/bin/python

import numpy as np
import matplotlib as mlt
import matplotlib.pyplot as plt

if __name__ == '__main__':
    a = np.array([[0+0j], [1+1j], [2+2j], [3+3j]])
    print a, type(a), a.dtype

解释:创建复数数组,注意0j不能写成0*j。

4.对 2中的数组进行切片,且将其赋予另一个变量,并对其进行改变元素的操作。
代码:

#!/usr/bin/python

import numpy as np
import matplotlib as mlt
import matplotlib.pyplot as plt

if __name__ == '__main__':
    a = np.arange(1,7,1)
    print a
    b = a[2:5]
    c = a[::-1]
    b[0] = 100
    print a
    print b
    print c

解释:a[2:5]为对数组a进行切片操作,取其中的2,3,4位(不包括5)的元素。改变b[0]的元素,发现a[2]的值也变为 100,因为a,b共享元素。a[::-1]为从后向前输出a数组。

5.在4中,采用两种方法当改变b值时,a不变。
方法一,代码:

#!/usr/bin/python

import numpy as np
import matplotlib as mlt
import matplotlib.pyplot as plt

if __name__ == '__main__':
    a = np.arange(1,7,1)
    print a
    b = a[2:5].copy()
    b[0] = 100
    print a
    print b

解释:使用深度复制copy()。

方法2,代码:

#!/usr/bin/python

import numpy as np
import matplotlib as mlt
import matplotlib.pyplot as plt

if __name__ == '__main__':
    a = np.arange(1,7,1)
    ind = np.linspace(2,5,4)
    ind = np.astype(np.int)
    #ind = np.arange(2,6,1)
    b = a[ind]
    b[0] = 100
    print a
    print b

解释:当输入序列号即index值时,a与b不共享空间。

6.numpy中和原始python一些方法速度的比较。
代码:

#!/usr/bin/python

import numpy as np
import matplotlib as mlt
import matplotlib.pyplot as plt
import time
import math
if __name__ == '__main__':
    for nums in np.logspace(0,7,8,base=10):
        xx = np.linspace(0,10, nums)
        timeStart = time.clock()
        np.sin(xx)
        timeEndFirst =  time.clock() - timeStart

        xx = xx.tolist()
        timeStart = time.clock()
        for ind, text in enumerate(xx):
            xx[ind] = math.sin(text)
        timeEndSecond = time.clock() - timeStart

        print nums, ': ', timeEndFirst, timeEndSecond, timeEndFirst/timeEndSecond

解释:np.logspace(0,7,8,base =10)为以base=10为底,生成8个指数,幂分别为从0到7的8个数。np.linspace(0,10,nums)为从0, 到10 把这个区间分为nums份。logspace与linspace是闭区间,即0,到10都能取到,而arange为左闭右开,右边的值取不到。

7.生成20个随机数范围为0~1不包括1,包括0。找出其中大与0.6的数。
代码(生成随机数):

#!/usr/bin/python

import numpy as np
import matplotlib as mlt
import matplotlib.pyplot as plt

if __name__ == '__main__':
    np.random.seed(0)
    a = np.random.rand(20)
    print a

解释: seed()中为种子,当seed()中有数时,产生的随机数不变。没数时一直是变的。
代码(找到大于0.6的数):

#!bin/usr/python

import numpy as np
import matplotlib as mlt
import matplotlib.pyplot as plt

if __name__ == '__main__':
    np.random.seed()
    a = np.random.rand(20)
    print a
    b = a > 0.6
    print b, type(b)
    print a[b]

解释:b为一个布尔型的数组,可以当成数组的索引。

8.两种方法对二维数组去重。
[1 2]
3 4
5 6
1 3
3 4
7 6]
即去除重复的[1 3]。
方法1(使用复数的索引),代码:

#!/usr/bin/python

import numpy as np
import matplotlib as mlt
import matplotlib.pyplot as plt

if __name__ == '__main__':
    a = np.array([[1,2],[3,4],[5,6],[1,3],[3,4],[7,6]])
    print a
    b = a[:,0].reshape(-1,1)
    c = a[:,1].reshape(-1,1)
    d = b + c*1j
    ind = np.unique(d, return_index = True)[1]
    a = a[ind]
    print b
    print c
    print d
    print a

解释:由原始二维数组的第一列与第二列构建一个复数数组,找到复数数组重复的元素。注意c*1j不能写成c*j。

方法2,使用set()与tuple()。set无重复元素,tuple不能改变,且其是hashble的,因此可以当set中的元素。代码:

#!/usr/bin/python

import numpy as np
import matplotlib as plt

if __name__ == '__main__':
    a = np.array([[1,2],[3,4],[5,6],[1,3],[3,4],[7,6]])
    print a
    #d = list()
    #for ii in list(set(tuple(t) for t in a)):
    #    d.append(list(ii))
    # print d
    b = np.array(list(set(tuple(t) for t in a)))
    print b

解释:可以选择对一个数组增加set中的元素值来去重。注意,不能直接写b = np.array(list(set(t for t in a)))因为t为unhashble。注释掉的部分为将tuple转化为list元素的操作。

9.画一个正太高斯分布。
代码:

#!/usr/bin/python

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import math
if __name__ == '__main__':
    mu = 0
    sigma = 1
    x = np.arange(-3,3,0.1)
    y = np.exp(-(x-mu)**2/(2*sigma**2))/math.sqrt(2*math.pi)*sigma
    plt.plot(x, y, 'r-', linewidth=2, label='Gaussian')
    plt.legend(loc = 'upper right')
    plt.xlabel('x', fontsize = 15)
    plt.ylabel('y', fontsize = 15)
    plt.grid(True)
    plt.show()

不解释

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值