numpy学习2:数组创建方式

原文链接:blog.ouyangsihai.cn >> numpy学习2:数组创建方式

一、前言

Numerical Python,即数值Python包,是Python进行科学计算的一个基础包,所以是一个掌握其他Scipy库中模块的基础模块,一定需要先掌握该包的主要使用方式。

NumPy模块是Python的一种开源的数值计算扩展,是一个用python实现的科学计算包,主要包括:

  • 一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组,称为ndarray(N-dimensional array object)
  • 用于对整组数据进行快速运算的标准数学函数:ufunc(universal function object)
  • 实用的线性代数、傅里叶变换和随机数生成函数。
  • NumPy和稀疏矩阵的运算包Scipy配合使用更加方便。

其中,numpy有一个核心的数据结构,叫做ndarray

下面再了解一下ndarray的基本特征。

  • NumPy的数组类被称作ndarray。通常被称作数组。注意numpy.array和标准Python库类array.array并不相同,后者只处理一维数组和提供少量功能。
  • 一种由相同类型的元素组成的多维数组,元素数量是实现给定好的
    元素的数据类型由dtype(data-type)对象来指定,每个ndarray只有一种dtype类型
  • ndarray的大小固定,创建好数组后数组大小是不会再发生改变的

二、ndarray对象创建

可以通过numpy模块中的常用的几个函数进行创建ndarray多维数组对象,主要函数如下:

  • array函数:接收一个普通的python序列,并将其转换为ndarray
  • zeros函数:创建指定长度或者形状的全零数组。
  • ones函数:创建指定长度或者形状的全1数组。
  • empty函数:创建一个没有任何具体值的数组(准备地说是创建一些未初始化的ndarray多维数组)

2.1、array函数

array对象的定义:

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

上面的构造器接受以下参数:

序号 参数及描述
1. object 任何暴露数组接口方法的对象都会返回一个数组或任何(嵌套)序列。
2. dtype 数组的所需数据类型,可选。
3. copy 可选,默认为true,对象是否被复制。
4. order C(按行)、F(按列)或A(任意,默认)。
5. subok 默认情况下,返回的数组被强制为基类数组。 如果为true,则返回子类。
6. ndimin 指定返回数组的最小维数。

看了这么多定义,下面看看具体的实例吧。

  • 实例1
import numpy as np
#例子01
a = np.array([1,2,3,4,5])
print(a)
print(type(a))

输出:[1 2 3]
<class 'numpy.ndarray'>

  • 创建多个维度
a2 = np.array([[1,2],[3,4]])
print(a2)

输出:
[[1 2]
[3 4]]

  • 通过ndmin控制最小维度
#最小维度
a3 = np.array([1,2,3,4,5],ndmin = 3)
print(a3)

输出
[[[1 2 3 4 5]]]

ndmin这个参数的意思是,不管你给的数据的维度是多少,我总是会创建给出的最小的维度,比如这里ndmin=3,虽然给出的数据是一位的,但是也会创建一个三维的处理。

2.2、empty函数

  • numpy.empty
    创建指定形状和dtype的未初始化数组
  • numpy.empty(shape, dtype = float, order = 'C')

构造器接受下列参数:

序号 参数及描述
1. Shape 空数组的形状,整数或整数元组
2. Dtype 所需的输出数组类型,可选
3. Order 'C'为按行的 C 风格数组,'F'为按列的 Fortran 风格数组

举例:

#数组元素为随机值:创建一个4*4的的矩阵,数据为随机
arr = np.empty((4,4),dtype = 'i1')
print(arr)

输出:
[[ 1 0 0 0]
[ 0 0 0 0]
[ 48 6 50 38]
[ -7 127 0 0]]

  • numpy.zeros
    返回特定大小,以0填充
#例
arr = np.zeros((3,3))
print(arr)
# 自定义类型
arr = np.zeros((3,3), dtype =  [('x',  'i2'),  ('y',  'i2')])
print(arr)
  • numpy.ones
    返回特定大小,以1填充
arr = np.ones((2,3,4))
print(arr)
arr = np.ones((3,3), dtype =  [('x',  'i4'),  ('y',  'i4')])
print(arr)

输出:

[[[1. 1. 1. 1.]
  [1. 1. 1. 1.]
  [1. 1. 1. 1.]]

 [[1. 1. 1. 1.]
  [1. 1. 1. 1.]
  [1. 1. 1. 1.]]]
[[(1, 1) (1, 1) (1, 1)]
 [(1, 1) (1, 1) (1, 1)]
 [(1, 1) (1, 1) (1, 1)]]

2.3、通过列表,元祖,元祖列表创建方式

这些主要是通过列表,元祖,元祖列表来创建的方式。

  • numpy.asarray
    类似 numpy.array 可以将Python序列转换为ndarray
#来自列表
arr = [1,2,3,4]
arr2 = np.asarray(arr)
print(arr2)
print(type(arr))
print(type(arr2))

输出:
[1 2 3 4]
<class 'list'>
<class 'numpy.ndarray'>

#来自元组
arr = (1,2,3,4)
arr2 = np.asarray(arr)
print(arr2)
print(type(arr))
print(type(arr2))
#来自元组列表
arr = [(1,2,3,4),(5,6,7,8)]
arr2 = np.asarray(arr)
print(arr2)
print(type(arr))
print(type(arr2))

2.4、通过Numpy 来自数值范围的数组(arange、linespace、logspace)

  • arange函数: 类似python的range函数,通过指定开始值、终值和步长来创建一个一维数组,注意:最终创建的数组不包含终值

  • linspace函数:通过指定开始值、终值和元素个数来创建一个一维数组,数组的数据元素符合等差数列,可以通过endpoint关键字指定是否包含终值,默认包含终值

  • logspace函数:和linspace函数类似,不过创建的是等比数列数组
    使用随机数填充数组,即使用numpy.random中的random()函数来创建0-1之间的随机元素,数组包含的元素数量由参数决定

  • numpy.arange
    这个函数返回ndarray对象,包含给定范围内的等间隔值
    numpy.arange(start,stop,step,dtype)

arr = np.arange(1,20,5,dtype = float)
print(arr)

输出:
[ 1. 6. 11. 16.]

  • numpy.linspace
    与arange函数类似 等差数列
    numpy.linspace(start,stop,num,endpoint,retstep,dtype)
start 起始值
stop 结束值
num 生成等间隔样例的数量,默认为50
endpoint 序列中是否包含stop 值 默认为 True
arr = np.linspace(10,20,9)
print(arr)

arr = np.linspace(10,20,5,endpoint=False)
print(arr)

arr = np.linspace(10,20,5,retstep=True)
print(arr) #返回步长

输出:
[10. 11.25 12.5 13.75 15. 16.25 17.5 18.75 20. ]
[10. 12. 14. 16. 18.]
(array([10. , 12.5, 15. , 17.5, 20. ]), 2.5)

  • numpy.logspace
    等比数列
    numpy.logscale(start, stop, num, endpoint, base, dtype)
1. start 起始值是base ** start
2. stop 终止值是base ** stop
3. num 范围内的数值数量,默认为50
4. endpoint 如果为true,终止值包含在输出数组当中
5. base 对数空间的底数,默认为10
6. dtype 输出数组的数据类型,如果没有提供,则取决于其它参数
arr = np.logspace(1,10,10,base = 2)
print(arr)

输出:
[ 2. 4. 8. 16. 32. 64. 128. 256. 512. 1024.]

2.5、random创建方式

  • rand 返回 0 - 1 随机值
  • randn 返回一个样本具有标准正态分布
  • randint 返回随机的整数,位于半开区间[low,hight)size = 10 (3,3)
  • random_integers(low[, high, size]) 返回随机的整数,位于闭区间
  • random 返回随机浮点数
arr = np.random.rand(9).reshape(3,3)
print(arr)

arr = np.random.rand(3,2,3)
print(arr)

arr = np.random.randn(9).reshape(3,3)
print(arr)

arr = np.random.randn(3,2,3)
print(arr)

arr = np.random.randint(1,9,size = (2,4))
print(arr)

arr = np.random.random_integers(1,9,size =(2,4))
print(arr)

arr = np.random.random((3,2,3))
print(arr)

arr = np.random.randn(3,2,3)
print(arr)

文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号:cplus人工智能算法后端技术,获取优质学习资源。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容

  • 基础篇NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(...
    oyan99阅读 5,115评论 0 18
  • NumPy是Python中关于科学计算的一个类库,在这里简单介绍一下。 来源:https://docs.scipy...
    灰太狼_black阅读 1,224评论 0 5
  • 先决条件 在阅读这个教程之前,你多少需要知道点python。如果你想从新回忆下,请看看Python Tutoria...
    舒map阅读 2,570评论 1 13
  • 本教程是基于Numpy1.14官方网站的文档 原文地址:点我呀 为本人在备考期间利用课余时间进行翻译的,预计在一周...
    刘点石阅读 13,858评论 1 31
  • 今天是我们去南京研学的第二天,上午,我们吃了比较丰盛的早餐,然后坐车近一个小时赶往南京大屠杀纪念馆。 ...
    人马座黑洞阅读 241评论 0 3