NumPy学习(一)

NumPy数组创建

NumPy数组属性

NumPy数学算术与算数运算

NumPy数组创建

NumPy 中定义的最重要的对象是称为 ndarray 的 N 维数组类型。 它描述相同类型的元素集合。 可以使用基于零的索引访问集合中的项目。
ndarray中的每个元素在内存中使用相同大小的块。 ndarray中的每个元素是数据类型对象的对象(称为 dtype)。
从ndarray对象提取的任何元素(通过切片)由一个数组标量类型的 Python 对象表示。

  

它从任何暴露数组接口的对象,或从返回数组的任何方法创建一个ndarray。

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 指定返回数组的最小维数。

dtype用来设置元素的数据类型

NumPy 支持比 Python 更多种类的数值类型。 下表显示了 NumPy 中定义的不同标量数据类型。
序号 数据类型及描述
1. bool_存储为一个字节的布尔值(真或假)
2. int_默认整数,相当于 C 的long,通常为int32或int64
3. intc相当于 C 的int,通常为int32或int64
4. intp用于索引的整数,相当于 C 的size_t,通常为int32或int64
5. int8字节(-128 ~ 127)
6. int1616 位整数(-32768 ~ 32767)
7. int3232 位整数(-2147483648 ~ 2147483647)
8. int6464 位整数(-9223372036854775808 ~ 9223372036854775807)
9. uint88 位无符号整数(0 ~ 255)
10. uint1616 位无符号整数(0 ~ 65535)
11. uint3232 位无符号整数(0 ~ 4294967295)
12. uint6464 位无符号整数(0 ~ 18446744073709551615)
13. float_float64的简写
14. float16半精度浮点:符号位,5 位指数,10 位尾数
15. float32单精度浮点:符号位,8 位指数,23 位尾数
16. float64双精度浮点:符号位,11 位指数,52 位尾数
17. complex_complex128的简写
18. complex64复数,由两个 32 位浮点表示(实部和虚部)
19. complex128复数,由两个 64 位浮点表示(实部和虚部)

  

最简单的创建方式

import numpy as np
#将列表转为numpy的数组
array=np.array([[1,2,3],[4,5,6]])
print(array)

 

运行结果:
[[1 2 3]
[4 5 6]]

  

1.

创建特殊数组

返回特定大小,以 0 填充的新数组。

numpy.zeros(shape, dtype = float, order = 'C')

import numpy as np
#定义一个三行四列全为零的矩阵
c=np.zeros((3,4))
print(c)

运算结果:

[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]

  

2.

返回特定大小,以 1 填充的新数组。

numpy.ones(shape, dtype = None, order = 'C')

import numpy as np
#定义一个3行2列全为1的矩阵
d=np.ones((3,2))
print(d)

运行结果:

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

3.

它创建指定形状和dtype的未初始化数组。 它使用以下构造函数:

numpy.empty(shape, dtype = float, order = 'C')

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

  

import numpy as np
#生成一个空矩阵,还不懂这里的空到底指什么。。。
e=np.empty((3,1))
print(e)

运行结果:

[[1.443e-321]
[0.000e+000]
[0.000e+000]]

 

4.

此函数类似于arange()函数。 在此函数中,指定了范围之间的均匀间隔数量,而不是步长。 此函数的用法如下。

numpy.linspace(start, stop, num, endpoint, retstep, dtype)

import numpy as np
#将一段连续长大小为分几份
f=np.linspace(1,10,5) #这里的意思就是
print(f)

运行结果:

[ 1.    3.25  5.5   7.75 10.  ]

  

5.

这个函数返回ndarray对象,包含给定范围内的等间隔值。

numpy.arange(start, stop, step, dtype)

import numpy as np
返回等间隔数字的数组
array2=np.arange(6) #一个参数,默认从零开始;两个参数,从第一个参数开始,到第二个参数,不包括第二个参数;三个参数,最后一个为间隔的大
小,默认为1
print(array2)

运行结果:

[0 1 2 3 4 5]

  

6.

import numpy as np
f=np.random.random((2,4)) #生成两行四列的数组,每个元素大于0小于1
print(f)

运行结果:

[[0.92670103 0.92050586 0.67470818 0.61072068]
[0.52409562 0.562209 0.08881487 0.06907785]]

 

NumPy数组属性及方法

ndarray.shape

这一数组属性返回一个包含数组维度的元组,它也可以用于调整数组大小。

ndarray.ndim

这一数组属性返回数组的维数。

numpy.itemsize

这一数组属性返回数组中每个元素的字节单位长度。

numpy.size

这一 数组属性返回数组中所有元素的个数

numpy.dtype()

返回数组元素的数据类型

numpy.flags

ndarray对象拥有以下属性。这个函数返回了它们的当前值。

序号	属性及描述
1. C_CONTIGUOUS (C) 数组位于单一的、C 风格的连续区段内
2. F_CONTIGUOUS (F) 数组位于单一的、Fortran 风格的连续区段内
3. OWNDATA (O) 数组的内存从其它对象处借用
4. WRITEABLE (W) 数据区域可写入。 将它设置为flase会锁定数据,使其只读
5. ALIGNED (A) 数据和任何元素会为硬件适当对齐
6. UPDATEIFCOPY (U) 这个数组是另一数组的副本。当这个数组释放时,源数组会由这个数组中的元素更

  

程序示例:

import numpy as np

#将列表转为numpy的数组
array=np.array([[1,2,3],[4,5,6]])
print(array.ndim) #输出数组维度
#shape属性默认输出行列,也可以设置数组的行列 print(array.shape) #输出行列
#第一种设置行列的方法
array.shape =(3,2)
print(array) #第二种设置行列的方法
array=array.reshape(2,3) #注意一定要重新赋值
print(array) print(array.itemsize) #每个元素的字节长度单位,可以通过dtype参数设置
print(array.size) #所有元素的个数
print(array.flags) #展示当前的标志

 

运行结果

2
[[1 2]
[3 4]
[5 6]]
[[1 2 3]
[4 5 6]]
4
6
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : False
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False

  

NumPy算数函数与算数运算

NumPy 包含大量的各种数学运算功能。 NumPy 提供标准的三角函数,算术运算的函数,复数处理函数等。

三角函数

NumPy 拥有标准的三角函数,它为弧度制单位的给定角度返回三角函数比值。

程序示例

import numpy as np
a = np.array([0,30,45,60,90])
print '不同角度的正弦值:'
# 通过乘 pi/180 转化为弧度
print np.sin(a*np.pi/180)
print '\n'
print '数组中角度的余弦值:'
print np.cos(a*np.pi/180)
print '\n'
print '数组中角度的正切值:'
print np.tan(a*np.pi/180)

 

 

运行结果

不同角度的正弦值:
[ 0. 0.5 0.70710678 0.8660254 1. ] 数组中角度的余弦值:
[ 1.00000000e+00 8.66025404e-01 7.07106781e-01 5.00000000e-01
6.12323400e-17] 数组中角度的正切值:
[ 0.00000000e+00 5.77350269e-01 1.00000000e+00 1.73205081e+00
1.63312394e+16]

反三角函数

arcsinarccos,和arctan函数返回给定角度的sincostan的反三角函数。 这些函数的结果可以通过numpy.degrees()函数通过将弧度制转换为角度制来验证。

程序示例

import numpy as np
a = np.array([0,30,45,60,90])
print ('含有正弦值的数组:')
sin = np.sin(a*np.pi/180)
print(sin)
print('计算角度的反正弦,返回值以弧度为单位:')
inv = np.arcsin(sin)
print(inv)
print ('通过转化为角度制来检查结果:')
print(np.degrees(inv))

运行结果

含有正弦值的数组:
[0. 0.5 0.70710678 0.8660254 1. ]
计算角度的反正弦,返回值以弧度为单位:
[0. 0.52359878 0.78539816 1.04719755 1.57079633]
通过转化为角度制来检查结果:
[ 0. 30. 45. 60. 90.]

 

舍入函数

numpy.around()

这个函数返回四舍五入到所需精度的值。 
该函数接受以下参数。numpy.around(a,decimals)
序号	参数及描述
1. a 输入数组
2. decimals 要舍入的小数位数。 默认值为0。 如果为负,整数将四舍五入到小数点左侧的位置

  

程序示例

import numpy as np
a = np.array([1.0,5.55, 123, 0.567, 25.532])
print('原数组:')
print(a)
print('舍入后:')
print(np.around(a))
print np.around((a, decimals = 1))
print np.around((a, decimals = -1))

 

运行结果

原数组:
[ 1. 5.55 123. 0.567 25.532] 舍入后:
[ 1. 6. 123. 1. 26. ]
[ 1. 5.6 123. 0.6 25.5]
[ 0. 10. 120. 0. 30. ]

  

numpy.floor()

此函数返回不大于输入参数的最大整数。 即标量x 的下限是最大的整数i ,使得i <= x。 注意在Python中,向下取整总是从 0 舍入。
说这么多,就是向下取整,比如一个数:-1.7,向下取整为-2,向上取整为-1
import numpy as np
a = np.array([-1.7, 1.5, -0.2, 0.6, 10])
print('提供的数组:')
print(a)
print('修改后的数组:')
print(np.floor(a))
提供的数组:
[-1.7 1.5 -0.2 0.6 10. ]
修改后的数组:
[-2. 1. -1. 0. 10.]

 

numpy.ceil()

ceil()函数返回输入值的上限,即,标量x的上限是最小的整数i ,使得i> = x

就是向上取整。

算数运算

程序示例

import  numpy as np

#一维数组的简单计算
a= np.array([10,23,44,30])
b=np.arange(4)
print(a)
print(b) #相同位置相加
c=a+b
print(c) #乘法
c=a*b
print(c) #b**2
c=b**2
print(c) print(a<2)
print(a==2)

运行结果

[10 23 44 30]
[0 1 2 3]
[10 24 46 33]
[ 0 23 88 90]
[0 1 4 9]
[False False False False]
[False False False False]

  

程序示例


import numpy as np
array1=np.array([[1,4],[4,8]])
array2=np.arange(4).reshape(2,2) #这里依然对应位置相乘
d=array1*array2
print(d) #矩阵的乘法
d=np.dot(array1,array2)
print(d)
d=array1.dot(array2)
print(d) #1为行,0为列
f=np.random.random((2,4))
print(f)
print(np.sum(f))
print(np.min(f))
print(np.max(f)) print(np.sum(f,axis=1))
print(np.min(f,axis=0))
print(np.max(f,axis=1))

  

运行结果

[[ 0  4]
[ 8 24]]
[[ 8 13]
[16 28]]
[[ 8 13]
[16 28]]
[[0.81949136 0.53538773 0.98840439 0.80249925]
[0.65929239 0.69338047 0.00943806 0.56616625]]
5.0740598977352835
0.009438059212795835
0.9884043925380781
[3.14578273 1.92827717]
[0.65929239 0.53538773 0.00943806 0.56616625]
[0.98840439 0.69338047]

  

import numpy as np

# #将列表转为numpy的数组
array1=np.arange(2,14).reshape(3,4)
print(array1)
print('总和')
print(array1.sum()) print('最大最小值')
print(array1.max())
print(array1.min()) print('最大最小值的索引')
print(array1.argmin())
print(array1.argmax()) print('平均值')
print(array1.mean())
print(np.average((array1))) print('分别计算行和列的平均值')
print(np.mean(array1,axis=0))
print(np.mean(array1,axis=1)) print('中位值')
print(np.median(array1)) print('累积值')
print(np.cumsum(array1)) print('前一项减后一项')
print(np.diff(array1)) print('数组中不为零的值')
print(np.nonzero(array1))
print(array1[np.nonzero(array1)]) print('数组中满足条件')
print(np.where(array1>10))
print(array1[np.where(array1>10)]) print('矩阵的转置')
print(np.transpose(array1)) print('所有大于9的元素等于9,所有小于5的元素等于5')
print(np.clip(array1,5,9))

  

[[ 2  3  4  5]
[ 6 7 8 9]
[10 11 12 13]]
90
最大最小值
13
2
最大最小值的索引
0
11
平均值
7.5
7.5
分别计算行和列的平均值
[6. 7. 8. 9.]
[ 3.5 7.5 11.5]
中位值
7.5
累积值
[ 2 5 9 14 20 27 35 44 54 65 77 90]
前一项减后一项
[[1 1 1]
[1 1 1]
[1 1 1]]
数组中不为零的值
(array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64), array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))
[ 2 3 4 5 6 7 8 9 10 11 12 13]
数组中满足条件
(array([2, 2, 2], dtype=int64), array([1, 2, 3], dtype=int64))
[11 12 13]
矩阵的转置
[[ 2 6 10]
[ 3 7 11]
[ 4 8 12]
[ 5 9 13]]
所有大于9的元素等于9,所有小于5的元素等于5
[[5 5 5 5]
[6 7 8 9]
[9 9 9 9]]

  

用于执行算术运算(如add(),subtract(),multiply()和divide())的输入数组必须具有相同的形状或符合数组广播规则。

程序示例

import numpy as np
a = np.arange(9, dtype = np.float_).reshape(3,3)
print('第一个数组:' )
print (a ) print ('第二个数组:' )
b = np.array([10,10,10])
print(b )
print('两个数组相加:')
print(np.add(a,b) ) print ('两个数组相减:' )
print(np.subtract(a,b) ) print ('两个数组相乘:' )
print(np.multiply(a,b) ) print ('两个数组相除:' )
print(np.divide(a,b))

 

运行结果

第一个数组:
[[ 0. 1. 2.]
[ 3. 4. 5.]
[ 6. 7. 8.]] 第二个数组:
[10 10 10] 两个数组相加:
[[ 10. 11. 12.]
[ 13. 14. 15.]
[ 16. 17. 18.]] 两个数组相减:
[[-10. -9. -8.]
[ -7. -6. -5.]
[ -4. -3. -2.]] 两个数组相乘:
[[ 0. 10. 20.]
[ 30. 40. 50.]
[ 60. 70. 80.]] 两个数组相除:
[[ 0. 0.1 0.2]
[ 0.3 0.4 0.5]
[ 0.6 0.7 0.8]]

  

NumPy学习(让数据处理变简单)的更多相关文章

  1. 【大数据技术能力提升_2】numpy学习

    numpy学习 标签(空格分隔): numpy python 数据类型 5种类型:布尔值(bool),整数(int),无符号整数(uint).浮点(float).复数(complex) 支持的原始类型 ...

  2. NumPy学习笔记 二

    NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

  3. NumPy学习笔记 一

    NumPy学习笔记 一 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

  4. 数据分析之Pandas和Numpy学习笔记(持续更新)<1>

    pandas and numpy notebook        最近工作交接,整理电脑资料时看到了之前的基于Jupyter学习数据分析相关模块学习笔记.想着拿出来分享一下,可是Jupyter导出来h ...

  5. 我在阿里这仨月 前端开发流程 前端进阶的思考 延伸学习的方式很简单:google 一个关键词你能看到十几篇优秀的博文,再这些博文中寻找新的关键字,直到整个大知识点得到突破

    我在阿里这仨月 Alibaba 试用期是三个月,转眼三个月过去了,也到了转正述职的时间.回想这三个月做过的事情,很多很杂,但还是有重点. 本文谈一谈工作中遇到的各种场景,需要用到的一些前端知识,以及我 ...

  6. (转)Python数据分析之numpy学习

    原文:https://www.cnblogs.com/nxld/p/6058572.html https://morvanzhou.github.io/tutorials/data-manipulat ...

  7. numpy学习总结

    Contents Numpy是一个用python实现的科学计算包,主要提供矩阵运算的功能,而矩阵运算在机器学习领域应用非常广泛,Numpy一般与Scrapy.matplotlib一起使用. Numpy ...

  8. numpy学习Ⅱ

    今天有空再把numpy看一下,补充点不会的,再去看matplotlib 回顾之前笔记,发现之前的numpy学习Ⅰ中关于numpy的行.列.维可能表述有点不清晰,这里再叙述一下 import numpy ...

  9. phpunit测试学习 1:一点简单的扼要有用的东西的总结 一点入门认识

    16:45 2015/12/8phpunit测试学习 1:一点简单的扼要有用的东西的总结  一点入门认识 具体的入门安装和入门实践请参照文中的推荐博客或网上其他博客推荐博客,我感觉这几篇博客写得很不错 ...

随机推荐

  1. Pycharm+Anaconda安装及配置

    Pycharm是一款功能非常强大的IDE,配合Anaconda使用会非常的方便. 在安装Pycharm之前,我们的电脑上已经安装了Anaconda. 我们从官网下载Pycharm社区版.(https: ...

  2. BZOJ:1816 [Cqoi2010]扑克牌 (贪心或二分答案)

    题面 \(solution:\) 这道题难就难在你能否读懂题目的意思,我们将它翻译一下: 现在我有n根竹子(每根竹子有\(c_i\)节,每节竹子高度为1),我可以通过消耗一点法力值使某一根竹子的某两节 ...

  3. python安装模块方法汇总

    方法一: 原文地址: http://blog.csdn.net/cighao/article/details/47860041 在 windows 系统下,只需要输入命令 pip install re ...

  4. ppt 制作圆角三角形

    制作圆角三角形: PART 01 :插入三角形与三个等大的圆形: PART 02 :利用[任意多边形]和[合并形状-剪除]获得缺三角: (先选中大三角形,然后再选中任意多边形,"格式&quo ...

  5. WPF版公司的自动签到程序

    1.外包公司要求早上签到,就写了一个自动打卡程序. 2.一直都想写这个程序,可是一直没有思路,知道有个软件公司找我做自动答题程序,于是自动打卡程序才应运而生.未来可以将自动答题程序开源工大家查看. 3 ...

  6. 经典]Linux内核中ioremap映射的透彻理解【转】

    转自:http://blog.csdn.net/lanyang123456/article/details/7403514 几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器.状态寄 ...

  7. centos7下配置saltstack

    1.下载 使用yum方式即可,可以更换下yum源,这里使用的阿里云的 [root@salt-master ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo h ...

  8. Mac 安装多个python环境

    1.安装Homebrew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/ ...

  9. sipML5聊天功能实现

    一.环境说明:在阅读sipML5的API文档时,发现它具有聊天的功能,于是在sipML5的源码中进行设定,实现了注册之后可以英文聊天(中文聊天需要在FreeSWITCh中进行设定). 二.具体配置: ...

  10. 求阶乘的和(for循环)

    第二种方法: