numpy学习 第1篇:numpy基础

numpy学习 第1篇:numpy基础

numpy是Python中的基础模块,类型ndarray定义了一个具有矢量算术运算的多维数组,无需编写循环,就能对整个数组进行批量运算。通常情况下,导入numpy,设置别名为np。

import numpy as np 

一,创建多维数组

ndarray是N-Dimension-Array的简称,该对象是一个快速而灵活的大数据集容器,该容器中存储的元素的数据类型都是相同的。

创建矩阵的方法有array()、arange()、ones函数和zeros函数,array()是一个函数,用于创建ndarray类型的对象。

1,使用array()函数创建数组

使用array()函数创建数组,可以使用type()函数查看对象的类型:

a = np.array([1,2,3,4,5])
a2 = np.array([[1,2,3,4,5],[6,7,8,9,10]])

通过array()函数,使用列表创建的是一维数组,使用嵌套的列表创建的是多维数组。

2,使用arange()函数创建矩阵

通过arange()函数创建矩阵,arange类似于Python的内置函数range,但返回的是一个ndarray,而不是列表。

函数的参数分别是:start、end和step,

a = np.arange(10) #default start=0, end=10(exclude 10),step=1
# [0 1 2 3 4 5 6 7 8 9]
a1 = np.arange(5,10) # start=5, end=10(exclude=10),step=1
# [5 6 7 8 9]
a2 = np.arange(5,20,2) # start=5, end=20(exclude 20),step=2
#[ 5  7  9 11 13 15 17 19]

3,使用ones(),zeros()和eye()函数创建数组

使用ones()创建元素都为1的数组,使用zeros()函数创建元素都是0的数组,参数是表示数组形状shape的元组,表示的是数组各个维度的元素数量。最简单的二维数组的shape元组是(row_num, column_num) ,它表示数组的行数量和列数量。

>>> a=np.ones(3);
array([ 1.,  1.,  1.])
>>> b=np.ones((3,2));
array([[ 1.,  1.],
       [ 1.,  1.],
       [ 1.,  1.]])

>>> c=np.zeros(3)
array([ 0.,  0.,  0.])
>>> d=np.zeros((2,3));   
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])

eye()创建一个正方形的NxN的单位矩阵,对角线的元素值是1,其余元素值是0

4,数组可以转换为列表

tolost()函数用于把一个数组对象转化为list列表:

d.tolist()

二,数组的属性

数组对象的属性主要有:

  • dtype:描述数组元素的类型
  • shape:以tuple表示的数组形状
  • ndim:数组的维度
  • size:数组中元素的个数

1,dtype对象

dtype是一个特殊的对象,它表示数组元素的类型。

2,shape对象

以元组形式表示一个数组的维度

3,ndim对象

数组各个维度的元素数量

三,索引和切片

ndarray对象的元素可以通过索引或切片来访问和修改,索引基于0。

1,数组的索引

一维数组很简单,从表面上看,一维数组的索引跟Python列表的功能差不多。

arr = np.arange(10)

arr[index]
arr[start:end]
arr[start:end:step]

在一个二维数组中,各索引位置上的元素不再是标量,而是一维数组。

arr2d=np.array([[1,2,3],[4,5,6],[7,8,9]])

>>> arr2d[2]
# array([7,8,9])
>>> arr2d[0][2]
#3
>>> arr2d[0,2]
#3

对于更高维度的数组,一个中括号表示一个维度,索引的使用依此类推。

2,数组的切片

数组切片是原始数组的视图,修改切片中的原始,会直接修改原始数据。数组的切片是Python基本切片的概念从一维到N维的扩展,通过中括号,start,stop和step参数提供给内置函数的slice函数来构造一个Python slice对象,此slice对象被传递给数组来提取数组的一部分。

获取切片的格式是[start:end:step],如果省略start,使用start的默认值0;如果省略end,那么end的默认值是:维度长度-1;如果省略step,使用step的默认值1。通常情况下,数组的切片是[start:end],这就意味着使用step的默认值1。

对于一维数组,数组切片上的任何修改都会直接修改原始数组:

arr = np.arange(10)
arr_slice=arr[5:8]
arr_slice[1]=111
#arr=array([0,1,2,3,4,5,111,7,8,9])

arr_slice[:]=222
#arr=array([0,1,2,3,4,222,222,222,8,9])

对于二维数组,一个中括号表示一个维度,依此类推。

四,随机数生成

numpy.random模块是对Python内置的random的升级,增加了一些用于搞笑生成多种概率分布的样本值的函数。

常用的numpy.random模块的函数:

  • seed:确定随机数生成器的种子
  • permutation:返回一个序列的随机排列
  • shuffle:对一个序列就地进行随机排列
  • rand:产生均匀分布的样本值
  • randint:从给定的上下限范围内随机选取正数
  • randn:产生标准正态分布
  • binomial:产生二项分布的样本值
  • normal:产生高斯正态分布的样本值
  • beta:产生Beta分布的样本值
  • chisquare:产生卡方分布的样本值
  • gamma:产生伽马分布的样本值
  • uniform:产生在[0,1]范围中均匀分布的样本值

例如,使用normal得到一个标准正态分布的4x4样本数组:

samples=np.random.normal(size=(4,4))

 

 

参考文档:

Numpy Quickstart tutorial

Python NumPy学习总结

你可能感兴趣的:(numpy学习 第1篇:numpy基础)