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. android软件简约记账app开发day05-记账页面条目代码优化和bug解决

    android软件简约记账app开发day05-记账页面条目代码优化和bug解决 今天还是因为该bug又极大的耽误了项目进程,该开发文档都要没有时间来写了. 先说bug吧,在昨天已经实现了页面图标的展 ...

  2. Jx.Cms开发笔记(五)-文章编辑页面标签设计

    标签页的样子 设计思路 与其他输入框一样,存在一个Label标签,由于这里不像其他输入框一样可以直接使用Row标签,所以这里需要额外增加. 使用Tag组件显示所有的标签,我们在Blazor 组件库 B ...

  3. CV技术指南免费版知识星球

    ​ 最近公众号的交流群满了,我们决定搞一个免费的知识星球,让大家在里面交流.以往都是我们写原创,大家阅读,读者之间没什么交流.与此同时,在CV技术指南交流群里,大部分问题都得到了很好地解决,但从来没有 ...

  4. Bugku CTF练习题---社工---信息查找

    Bugku CTF练习题---社工---信息查找 flag:KEY{462713425} 解题步骤: 1.观察题目,思考题目内容,了解答案是群号 2.这里涉及到好多的信息,首先有网址,第二个是今日头条 ...

  5. 干货长文:Linux 文件系统与持久性内存介绍

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 1.Linux 虚拟文件系统介绍 在 Linux 系统中一切皆文件,除了通常所说的狭义的文件以 ...

  6. 一文带你读懂什么是vxlan网络

    一个执着于技术的公众号 一.背景 随着云计算.虚拟化相关技术的发展,传统网络无法满足大规模.灵活性要求高的云数据中心的要求,于是便有了overlay网络的概念.overlay网络中被广泛应用的就是vx ...

  7. 一行代码如何隐藏 Linux 进程?

    开源Linux 长按二维码加关注~ 上一篇:IPv6技术白皮书(附PDF下载) 总有朋友问隐藏Linux进程的方法,我说你想隐藏到什么程度,是大隐于内核,还是小隐于用户.网上通篇论述的无外乎 hook ...

  8. 详解 Java 17 中新推出的密封类

    Java 17推出的新特性Sealed Classes经历了2个Preview版本(JDK 15中的JEP 360.JDK 16中的JEP 397),最终定稿于JDK 17中的JEP 409.Seal ...

  9. Java 对象头那点事

    概览 对象头 存放:关于堆对象的布局.类型.GC状态.同步状态和标识哈希码的基本信息.Java对象和vm内部对象都有一个共同的对象头格式. (后面做详细介绍) 实例数据 存放:类的数据信息,父类的信息 ...

  10. HttpResponse,render,redirect,静态文件配置,request对象方法,pycharm连接MySQL,django连接MySQL,django ORM

    HttpResponse 主要用于返回字符串类型的数据 def index(request): return HttpResponse('index页面') 在页面中就会显示 index页面 rend ...