NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。

ndarray 对象是用于存放同类型元素的多维数组。

1.数组的属性

In [ ]:

import numpy as np
a=np.array([[1,2,3],[1,2,4]],dtype=np.float32)
#数组元素总数
a.size

Out[ ]:

6

In [ ]:

# 数组的形状,多少行多少列
a.shape

Out[ ]:

(2, 3)

In [ ]:

# 数组的维数
a.ndim

Out[ ]:

2

In [ ]:

# 数组中元素类型
a.dtype

Out[ ]:

dtype('float32')

In [ ]:

# 更改数组元素类型
a=np.array([1,2,3],dtype=np.int8)
a.dtype

Out[ ]:

dtype('int8')

2.改变形状

改变数组的形状,这个经常会用到

In [ ]:

# 修改数组形状
a.reshape(3,2)

Out[ ]:

array([[1., 2.],
[3., 1.],
[2., 4.]], dtype=float32)

3.生成特殊数组

顺序数组,等差数组,等比数组,全零数组,全一数组,对角数组

In [ ]:

# 生成从0-9的十个数字
list(range(10))

Out[ ]:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [ ]:

np.arange(10)

Out[ ]:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [ ]:

#创建等差数组
np.linspace(0,10,10)

Out[ ]:

array([ 0.        ,  1.11111111,  2.22222222,  3.33333333,  4.44444444,
5.55555556, 6.66666667, 7.77777778, 8.88888889, 10. ])

In [ ]:

# 创建不包含结尾数字的等差数组
np.linspace(0,10,10,endpoint=False)

Out[ ]:

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

In [ ]:

# 创建等比数列
np.logspace(0,10,10,endpoint=False,base=2)

Out[ ]:

array([  1.,   2.,   4.,   8.,  16.,  32.,  64., 128., 256., 512.])

In [ ]:

2**np.linspace(0,10,10,endpoint=False)

Out[ ]:

array([  1.,   2.,   4.,   8.,  16.,  32.,  64., 128., 256., 512.])

In [ ]:

# 生成全0数组
np.zeros(2)

Out[ ]:

array([0., 0.])

In [ ]:

# 生成两行三列的全0数组
np.zeros((2,3))

Out[ ]:

array([[0., 0., 0.],
[0., 0., 0.]])

In [ ]:

# 生成3阶单位数组
np.eye(3)

Out[ ]:

array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])

In [ ]:

# 生成元素值全为1的数组
np.ones(2)

Out[ ]:

array([1., 1.])

In [ ]:

# 生成元素值全为1的数组
np.ones((2,3))

Out[ ]:

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

In [ ]:

#生成指定对角线元素值的数组
np.diag([1,3,7])

Out[ ]:

array([[1, 0, 0],
[0, 3, 0],
[0, 0, 7]])

4.生成随机数数组

In [ ]:

# 生成4个随机数
np.random.random(size=4)

Out[ ]:

array([0.99380006, 0.58109084, 0.42882938, 0.07277003])

In [ ]:

# 生成随机数数组
np.random.random(size=(2,3))

Out[ ]:

array([[0.34564092, 0.45134545, 0.38735849],
[0.38139285, 0.91636466, 0.85725663]])

In [ ]:

# 生成4个均匀分布的随机数
np.random.rand(2,3,2)

Out[ ]:

array([[[0.05311698, 0.76746714],
[0.85221954, 0.89683859],
[0.16683139, 0.9991075 ]], [[0.43788693, 0.8984444 ],
[0.86345445, 0.74366691],
[0.02199102, 0.95883056]]])

In [ ]:

# 生成正态分布的随机数
np.random.randn(2,3,2)

Out[ ]:

array([[[ 0.3403313 ,  0.62020657],
[ 2.2423117 , -0.05473819],
[-0.07679334, -0.01406795]], [[ 1.62656454, 0.68541225],
[-0.42121934, 0.09347002],
[-0.30088079, -0.08401791]]])

In [ ]:

# 随机生成0-10之间的2行3列随机数
np.random.randint(0,10,size=(2,3))

Out[ ]:

array([[7, 5, 6],
[8, 3, 6]])

5.索引与切片

ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。

ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。

In [ ]:

# 一维数组的索引
a=np.arange(10)
a

Out[ ]:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [ ]:

# 数组的第三个值
a[2]

Out[ ]:

2

In [ ]:

#数组从第三个值之后的值
a[2:]

Out[ ]:

array([2, 3, 4, 5, 6, 7, 8, 9])

In [ ]:

#数组第六个值之前的值
a[:5]

Out[ ]:

array([0, 1, 2, 3, 4])

In [ ]:

#数组从第二个值到最后一个值
a[1:-1]

Out[ ]:

array([1, 2, 3, 4, 5, 6, 7, 8])

In [ ]:

#数组从第二个值到最后一个值,其间步长为2
a[1:-1:2]

Out[ ]:

array([1, 3, 5, 7])

In [ ]:

# 多维数组的索引
b=np.random.randint(0,10,size=(2,3))
b

Out[ ]:

array([[0, 3, 6],
[2, 8, 0]])

In [ ]:

# 输出第二行所有元素
b[1,:]

Out[ ]:

array([2, 8, 0])

In [ ]:

#输出第一列所有元素
b[:,0]

Out[ ]:

array([0, 2])

In [ ]:

#???
b[:,::2]

Out[ ]:

array([[0, 6],
[2, 0]])

6.展开

Numpy 中包含了一些函数用于处理数组,大概可分为以下几类:修改数组形状,翻转数组,修改数组维度,连接数组,分割数组,数组元素的添加与删除

In [ ]:

# 展开多维数组变为一维数组
b.ravel()

Out[ ]:

array([0, 3, 6, 2, 8, 0])

7.拼接

广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。

如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长度相同。

当运算中的 2 个数组的形状不同时,numpy 将自动触发广播机制

In [ ]:

#拼接数组
a=np.arange(10).reshape(2,5)
b=np.linspace(0,1,endpoint=False,num=10).reshape(2,5)

In [ ]:

#横向拼接法一
np.vstack((a,b))
#横向拼接法二
np.concatenate((a,b),axis=0)

Out[ ]:

array([[0. , 1. , 2. , 3. , 4. ],
[5. , 6. , 7. , 8. , 9. ],
[0. , 0.1, 0.2, 0.3, 0.4],
[0.5, 0.6, 0.7, 0.8, 0.9]])

In [ ]:

#纵向拼接法一
np.vstack((a,b))
#纵向拼接法二
np.concatenate((a,b),axis=1)

Out[ ]:

array([[0. , 1. , 2. , 3. , 4. , 0. , 0.1, 0.2, 0.3, 0.4],
[5. , 6. , 7. , 8. , 9. , 0.5, 0.6, 0.7, 0.8, 0.9]])

In [ ]:

a=np.arange(36).reshape(6,6)
a

Out[ ]:

array([[ 0,  1,  2,  3,  4,  5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29],
[30, 31, 32, 33, 34, 35]])

8.分割

In [ ]:

#横向分割数组法一
np.hsplit(a,3)
#横向分割数组法二
np.split(a,3,axis=1)

Out[ ]:

[array([[ 0,  1],
[ 6, 7],
[12, 13],
[18, 19],
[24, 25],
[30, 31]]),
array([[ 2, 3],
[ 8, 9],
[14, 15],
[20, 21],
[26, 27],
[32, 33]]),
array([[ 4, 5],
[10, 11],
[16, 17],
[22, 23],
[28, 29],
[34, 35]])]

In [ ]:

#纵向分割数组法一
np.vsplit(a,3)
#横向分割数组法二
np.split(a,3,axis=0)

Out[ ]:

[array([[ 0,  1,  2,  3,  4,  5],
[ 6, 7, 8, 9, 10, 11]]),
array([[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23]]),
array([[24, 25, 26, 27, 28, 29],
[30, 31, 32, 33, 34, 35]])]

Numpy的ndarray数组基础的更多相关文章

  1. numpy的ndarray数组如何reshape成固定大小

    在做肺结节检测的时候,遇到dicom文件reshape之后尺寸大小不一.因为大下不一,numpy.reshape又无法重塑成指定大小的.最后还是在一个大牛的代码中找到了解决方法. VL = np.lo ...

  2. Python开发:NumPy学习(一)ndarray数组

    一.数据维度 一个数据表达一个含义,一组数据表达一个或多个含义. 数据维度概念:一组数据的组织形式,其中有一维数据.二维数据.多维数据.高维数据. 1.  一维数据 一维数据由对等关系的有序或无序数据 ...

  3. NumPy之:ndarray多维数组操作

    NumPy之:ndarray多维数组操作 目录 简介 创建ndarray ndarray的属性 ndarray中元素的类型转换 ndarray的数学运算 index和切片 基本使用 index wit ...

  4. 1.2 NumPy数组基础

    目录 第一章 numpy入门 1.2 numpy数组基础 1.2.1 数组的属性 1.2.2 数组的索引:获取单个元素 1.2.3 数组切片:获取子数组 1.2.4 数组的变形 1.2.5 数组的拼接 ...

  5. 3.2Python数据处理篇之Numpy系列(二)--- ndarray数组的创建与变换

    目录 (一)ndarray数组的创建 1.从列表以元组中创建: 2.使用函数创建: (二)ndarray数组的变换 1.维度的变换: 2.类型的变换: 目录: 1.ndarray数组的创建 2.nda ...

  6. Python之NumPy实践之数组和矢量计算

    Python之NumPy实践之数组和矢量计算 1. NumPy(Numerical Python)是高性能科学技术和数据分析的基础包. 2. NumPy的ndarray:一种对位数组对象.NumPy最 ...

  7. 什么是Numpy的ndarray

    什么是Numpy的ndarray 首先,Numpy的核心是ndarray. 然后,ndarray本质是数组,其不同于一般的数组,或者Python 的list的地方在于它可以有N 维(dimention ...

  8. Numpy 多维数组简介

     NumPy是一个功能强大的Python库,主要用于对多维数组执行计算.NumPy这个词来源于两个单词-- Numerical和Python.NumPy提供了大量的库函数和操作,可以帮助程序员轻松地 ...

  9. 发现Boost官方文档的一处错误(numpy的ndarray)

    文档位置:https://www.boost.org/doc/libs/1_65_1/libs/python/doc/html/numpy/tutorial/ndarray.html shape在这里 ...

随机推荐

  1. canvas 整个透明

          ctx.globalAlpha=.9

  2. python基础练习题(题目 回文数)

    day21 --------------------------------------------------------------- 实例030:回文数 题目 一个5位数,判断它是不是回文数.即 ...

  3. Python 函数进阶-迭代器

    迭代器 什么是迭代器 能被 next 指针调用,并不断返回下一个值的对象,叫做迭代器.表示为Iterator,迭代器是一个对象类型数据. 概念 迭代器指的是迭代取值的工具,迭代是一个重复的过程,每次重 ...

  4. CentOS 8 重启不能DHCP获取IP的解决方法

    一个执着于技术的公众号 今天遇到一个神奇的现象,我对CentOS 8系统做初始化之后再重启系统,发现系统不能通过NetworkManager获取DHCP IP了 查了系统日志发现是: Apr 30 0 ...

  5. 网络排查工具MTR介绍

    开源Linux 回复"读书",挑选书籍资料~ 常用的 ping,tracert,nslookup 一般用来判断主机的网络连通性,其实 Linux 下有一个更好用的网络连通性判断工具 ...

  6. Git 使用心得 & 常见问题整理

    开源Linux 回复"读书",挑选书籍资料~ Git 流程图 Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remot ...

  7. .NET性能优化-使用结构体替代类

    前言 我们知道在C#和Java明显的一个区别就是C#可以自定义值类型,也就是今天的主角struct,我们有了更加方便的class为什么微软还加入了struct呢?这其实就是今天要谈到的一个优化性能的T ...

  8. JuiceFS v1.0 beta3 发布,支持 etcd、Amazon MemoryDB、Redis Cluster

    JuiceFS v1.0 beta3 在元数据引擎方面继续增强,新增 etcd 支持小于 200 万文件的使用场景,相比 Redis 可以提供更好的可用性和安全性.同时支持了 Amazon Memor ...

  9. CSS Diner详解

    详细CSS Diner CSS Diner想必很多人听过,这是一个练习CSS中的选择器的不错的网站,最近在学习前端,打算好好写一下 常用英文单词: plates:盘子 bento:盒饭.便当 pick ...

  10. EF Core 的关联查询

    0 前言 本文会列举出 EF Core 关联查询的方法: 在第一.二.三节中,介绍的是 EF Core 的基本能力,在实体中配置好关系,即可使用,且其使用方式,与编程思维吻合,是本文推荐的方式. 第四 ...