Python Numpy初学习



NumPy的主要对象是同种元素的多维数组。

1.创建数组

可以使用 array函数从常规的Python列表和元组创造数组。所创建的数组类型由原序列中的元素类型推导而来。

用一组来[]内的书来创造数组,后面可以加上数据类型

>>> from numpy  import *
>>> a = array( [2,3,4],dtype=numpy.int32)
<span>>>> a  </span>
<span>    array([<span class="number">2</span><span>, </span><span class="number">3</span><span>, </span><span class="number">4</span><span>])  </span></span><span>   </span>
>>> b = array([1.2, 3.5, 5.1],'float64')
<pre class="python" name="code"><span>>>> b  </span>
<span>    array([1.<span class="number">2</span><span>, </span><span class="number">3.5</span><span>, </span><span class="number">5.1</span><span>])  </span></span><span></span>
 

类似可以构造二维数组,三维数组,例如:

>>> a = array( [ (1,2,3), (4,5,6) ] )
>>> a
array([[ 1 ,  2 ,  3 ],
       [ 4 ,  5 ,  6 ]])

同样,可用函数zeros可创建一个全是0的数组,用函数ones可创建一个全为1的数组,函数empty创建一个内容随机并且依赖与内存状态的数组。默认创建的数组类型(dtype)都是float64。如:

>>> d = zeros((3,4))  
>>> d  
array([[ 0.,  0.,  0.,  0.],  
     [ 0.,  0.,  0.,  0.],  
     [ 0.,  0.,  0.,  0.]])  

还可用arange函数返回一个数列形式的数组arange(初始点,终点,步长)如:

>>> arange(10, 30, 5)  
    array([10, 15, 20, 25])  


如对于浮点数可以用linspace函数代替arange函数,如:

>>> linspace(-1, 0, 5)  
        array([-1, -0.75,-0.5 ,-0.25,  0 ])  


resharp(num1,num2)函数将一维数组分解成包含 num1 个一维数组的二维数组 ,每个部分包含 num2 个元素如:

>>> print np.arange(15).reshape(3,5) 
[[ 0  1  2  3  4]  
 [ 5  6  7  8  9]  
[10 11 12 13 14]]  



2.输出数组
  当输出一个数组时,NumPy以特定的布局用类似嵌套列表的形式显示:

  • 第一行从左到右输出
  • 每行依次自上而下输出
  • 每个切片通过一个空行与下一个隔开
  • 一维数组被打印成行,二维数组成矩阵,三维数组成矩阵列表。
>>> a = arange(6)                          
>>> print a  
    [0 1 2 3 4 5]    
   
>>> b = arange(12).reshape(4,3)           
>>> print b  
   [[ 0  1  2]  
   [ 3  4  5]  
   [ 6  7  8]  
   [ 9 10 11]]   
  
>>> c = arange(24).reshape(2,3,4)
>>> print c  
    [[[ 0  1  2  3]  
    [ 4  5  6  7]  
    [ 8  9 10 11]]  
     
    [[12 13 14 15]  
    [16 17 18 19]  
    [20 21 22 23]]]  

如果一个数组太长,NumPy自动省略中间部分而只打印两端的数据

>>> print arange(10000)  
   [   0    1    2 ..., 9997 9998 9999] 
     
>>> print arange(10000).reshape(100,100)  
   [[   0    1    2 ...,   97   98   99]  
    [ 100  101  102 ...,  197  198  199]  
    [ 200  201  202 ...,  297  298  299]  
    ...,  
    [9700 9701 9702 ..., 9797 9798 9799]  
    [9800 9801 9802 ..., 9897 9898 9899]  
    [9900 9901 9902 ..., 9997 9998 9999]]  


3.索引,切片和迭代


>>> a=array [[1,2,3],[4,5,6]] 
>>> a[1][2]
6
>>>a[1,2]
6
>>>a[1]
array ([4,5,6])
>>>a[1,1:2]
5


多维数组的遍历是以是第一个轴为基础的:

>>>for row in a:
       print row
 [1,2,3]
 [4,5,6]


4.基本运算

数组的算术运算是按元素逐个运算。数组运算后将创建包含运算结果的新数组。乘法运算*素逐个计算,矩阵乘法可以使用dot函数

>>> a= np.array([20,30,40,50])  
>>> b= np.arange( 4)  
>>> b  
array([0, 1, 2, 3])  
>>> c= a-b  
>>> c  
array([20, 29, 38, 47])  
>>> b**2  
array([0, 1, 4, 9])  
>>> A= np.array([[1,1],  [0,1]])  
>>> B= np.array([[2,0],  [3,4]])  
>>> A*B   
array([[2, 0],  
      [0, 4]])  
>>> np.dot(A,B)   
array([[5, 4],  
       [3, 4]])  


5.数组组合

>>> a = arange(9).reshape(3,3)
>>> a
array([[0, 1, 2],
           [3, 4, 5],
           [6, 7, 8]])
>>> b = 2 * a
>>> b
array([[ 0, 2, 4],
       [ 6, 8, 10],
       [12, 14, 16]])

水平组合

>>> hstack((a, b))  
array([[ 0, 1, 2, 0, 2, 4],  
       [ 3, 4, 5, 6, 8, 10],  
       [ 6, 7, 8, 12, 14, 16]])  

垂直组合

>>> vstack((a, b))
array([[ 0, 1, 2],
       [ 3, 4, 5],
       [ 6, 7, 8], 
       [ 0, 2, 4],
       [ 6, 8, 10],
       [12, 14, 16]])


深度组合

>>> dstack((a, b))
array([[[ 0, 0],
        [ 1, 2],
        [ 2, 4]],

       [[ 3, 6],
        [ 4, 8],
        [ 5, 10]],

       [[ 6, 12],
        [ 7, 14],
        [ 8, 16]]])



6.数组复制

完全不复制

>>> a = arange(12)  
>>> b = a      
>>> b is a           
True  


浅复制

>>> c = a.view()  
>>> c is a  
False  
>>> c[0,4] = 1234        
>>> a  
array([[   0,    1,    2,    3],  
       [1234,    5,    6,    7],  
       [   8,    9,   10,   11]])  

深复制

>>> d = a.copy()       
>>> d is a  
False  
>>> d.base is a       
False  
>>> d[0,0] = 9999  
>>> a  
array([[   0,   10,   10,    3],  
       [1234,   10,   10,    7],  
       [   8,   10,   10,   11]])  








  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值