Pytorch学习笔记Day一(Numpy学习)

Numpy学习

数组有几个非常重要的概念

1、维度Dimensions,叫作轴axes

2、轴的个数叫作秩rank

例:

[[0,0,0],

 [0,0,0]]

ndarray.ndim = 2:数组轴的个数。二维数组

ndarray.shape = (2,3):数组的维度。(n,m)

ndarray.size = 6:数组元素总个数。n*m

ndarray.dtype = int64:数组元素数据类型。

ndarray.itemsize= 8:数组元素所占字节数。

ndarray.data:通常不用,通常用索引方法,用于读元素。

 

  1. 创建数组
import numpy as np
a = np.array([1,2,3])#[1,2,3]
b = np.zeros(2,3)
***
[[0,0,0],
 [0,0,0]]
***
c = np.ones(2,3)
[[1,1,1],
 [1,1,1]]
d = np.empty(2,3)#2行3列,值随机。
e = np.arange(10,30,5)#[10,15,20,25] 第三个参数是步长,从第一个参数开始,不包含第二个参数。
f = np.linspace(0,1,2)#[0,1]从第一个参数开始到第二个参数,一共第三个参数的个数。

  1. 基本运算

+,-,*,/,+=,-=,*=,/=,np.dot,np.min,np,max,np.sum

这+=,-=,*=,/=运算时,要注意up-cast问题

这np.min,np,max,np.sum运算时,要注意axis参数,表示在哪个轴上进行运算。

在深度学习时很少需要用到运算的,只作简单了解。

  1. 索引、切片和迭代(重要)

 

import numpy as np
a = np.arange(0,10,1)
#[0,1,2,3,4,5,6,7,8,9]
a[0:9:1]#第一个参数表示从什么位置9开始到第二参数9的位置,步长是1.返回[0,1,2,3,4,5,6,7,8]
如果参数不填表示默认值
如:
a[::-1]#[9,8,7,6,5,4,3,2,1,0]

b = np.array([[1,2,3],
              [14,15,16],
              [4,5,6]])
b[0,1] = 2
b[1,1] = 15
b[0:2,1] = [2,15]
b[:,1] = [2,15,5]
b[:,0:2]=[[1,2],
          [14,15],
          [4,5]]
b[-1]=[4,5,6]#最后一行,等价于b[-1,:]

c=np.array([[[1,2,3,],[4,5,6]],
           [[7,8,9],[10,11,12]]])
c.shape#[2,2,3]
c[1,...] 等价于 c[1,:,:]]=[[7,8,9],[10,11,12]]
c[...,2] 等价于c[:,:,2]=[[3,6],[9,12]]! 我一直以为是[[[3],[6]],[[9],[12]]]?

d=np.arange(12) * 2
e=np.array([0,1,3])
d[e] = [0,2,6]#以数组作索引。
f=np.array([[1,2],[3,4]])
d[f]=[[1,4],[6,8]]


#以两个数组作为索引。
In [9]: a =np.arange(12).reshape(3,4)

In [10]: a
Out[10]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

In [11]: i=np.array([[0,1],[1,2]])

In [12]: i
Out[12]:
array([[0, 1],
       [1, 2]])

In [13]: j=np.array([[2,1],[3,3]])

In [14]: j
Out[14]:
array([[2, 1],
       [3, 3]])

In [15]: a[i,j]
Out[15]:
array([[ 2,  5],
       [ 7, 11]])

In [16]: a[i]
Out[16]:
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 4,  5,  6,  7],
        [ 8,  9, 10, 11]]])

#以BOOL值作索引
In [21]: a =np.arange(12).reshape(3,4)

In [22]: a
Out[22]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

In [23]: b=a>4

In [24]: b
Out[24]:
array([[False, False, False, False],
       [False,  True,  True,  True],
       [ True,  True,  True,  True]])

In [25]: a[b]
Out[25]: array([ 5,  6,  7,  8,  9, 10, 11])




 

 

  1. 数组的变形

         数组的形状可以用ndarray.shape查看

         改变形状用ravel和reshape改变

         ravel可以将数组打平

In [32]: a =np.arange(12).reshape(3,4)

In [33]: a.ravel()
Out[33]: array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

         reshape可以改变每个轴的大小。当参数为-1时,则自动计算。

In [37]: a =np.arange(12).reshape(3,4)

In [38]: a.reshape(3,2,-1)
Out[38]:
array([[[ 0,  1],
        [ 2,  3]],

       [[ 4,  5],
        [ 6,  7]],

       [[ 8,  9],
        [10, 11]]])

               resize方法,功能和reshape一样,但是不会返回一个新的数组,会改变数组本身。 

  1. 数组的组合和拆分

         vstack 、hstack、column_stack组合函数。

         vsplit、hsplit、split拆分函数

  1. 广播

      注意reshape时扩充1个维度。

        

In [39]: x=np.arange(4)

In [40]: xx = x.reshape(4,1)

In [41]: y=np.ones(5)

In [42]: x+y
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-42-259706549f3d> in <module>
----> 1 x+y

ValueError: operands could not be broadcast together with shapes (4,) (5,)

In [43]: xx+y
Out[43]:
array([[1., 1., 1., 1., 1.],
       [2., 2., 2., 2., 2.],
       [3., 3., 3., 3., 3.],
       [4., 4., 4., 4., 4.]])

In [44]: (xx+y).shape
Out[44]: (4, 5)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值