NumPy学习(让数据处理变简单)

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) #一个参数,默认从零开始;两个参数,从第一个参数开始,到第二个参数,不包括第二个参数;三个参数,最后一个为间隔的大小,默认为1print(array2)

运行结果:

[0 1 2 3 4 5]

  

6.

import numpy as npf=np.random.random((2,4)) #生成两行四列的数组,每个元素大于0小于1print(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.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+bprint(c)

#乘法c=a*bprint(c)

#b**2c=b**2print(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]

  

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

程序示例

import numpy as npa = 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]]

  

原文地址:https://www.cnblogs.com/-wenli/p/10261496.html

时间: 2024-10-11 23:29:44

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

『Python』Numpy学习指南第十章_高端科学计算库scipy入门(系列完结)

简介: scipy包包含致力于科学计算中常见问题的各个工具箱.它的不同子模块相应于不同的应用.像插值,积分,优化,图像处理,,特殊函数等等. scipy可以与其它标准科学计算程序库进行比较,比如GSL(GNU C或C++科学计算库),或者Matlab工具箱.scipy是Python中科学计算程序的核心包;它用于有效地计算numpy矩阵,来让numpy和scipy协同工作. 在实现一个程序之前,值得检查下所需的数据处理方式是否已经在scipy中存在了.作为非专业程序员,科学家总是喜欢重新发明造轮子

Numpy学习笔记(一)

Python本身支持的数据结构不多,除了int.float和string等一些常规的之外,还有列表.元祖.字典,都有自己的属性和方法,怎么说呢,功能已经足够强大,解决一般的问题已经足够,可当数据量增大,计算形式变得多样,这种普通的数据结构效率不高,况且python本身对于数组的支持不是很好,这也是为什么会有一批类似于numpy.scipy.panda等第三方库,大大扩展了python的功能,胶水的本质越来越突出.学习的成本也不高,不会像重新学一门语言那么困难,况且据了解,python的科学计算能

Numpy学习笔记(二)

最近一直在学HTML5和CSS3,Numpy的东西都有些生疏,那本书是已经看完了的,紧跟着相关的代码也都敲了一遍,还是发现了一些问题,因为这样的学习方式,总感觉太被动,紧紧跟着示例代码,缺少了整体观,即使你现在问我Numpy可以处理什么问题,我还是回答不出.所以,有必要回头重来一遍,再一次审视代码背后的意义,写博客真的是一个很不错的方式,毕竟,如果你不懂,写出来的文字必然也是混乱的. 那,下面记录一下Numpy学习笔记(二) Example1 文件读写:数据不应该仅仅存在内存里,应该及时保存在硬

NumPy学习笔记 一

NumPy学习笔记 一 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分析>第四版(华东师范大学数学系).<概率论与数理统计>(陈希孺,中科大出版).<概率论与数理统计>第二版(茆诗松.程依明等编).<组合最优化:理论与方法>(现代数学译丛23).笔记一主要记录NumPy&SciPy及相关软件的环境准备部分. NumPy的官方网站

AJAX学习整理二之简单实例

做了几个简单的实例,加载txt文本内容.加载xml文件内容,把xml文本内容转换成html表格显示.废话不多说,直接贴代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/html"> <head>     <title>通过ajax获取文本内容</title>     <meta charset="utf-8">     <scr

Android中关于JNI 的学习(零)简单的例子,简单地入门

Android中JNI的作用,就是让Java能够去调用由C/C++实现的代码,为了实现这个功能,需要用到Anrdoid提供的NDK工具包,在这里不讲如何配置了,好麻烦,配置了好久... 本质上,Java去调用C/C++的代码其实就是去调用C/C++提供的方法,所以,第一步,我们要创建一个类,并且定义一个Native方法,如下: JniTest类: public class JniTest { public native String getTestString(); } 可以看到,在这个方法的前

ffmpeg学习4--ffmpeg类的简单封装,包含解码和定时录像功能

ffmpeg学习4--ffmpeg类的简单封装,包含解码和定时录像功能 参考网上的资料,简单封装了一下ffmpeg,这里记录一下,其它传感器编码及项目中用到的已经抽离,这里只包含解码和录像部分.这只是个玩具级别的测试.完整测试代码下载:代码下载 ffmpegDeCode.h #pragma once #include "stdafx.h" #include<iostream> using namespace std; extern char *VideoPath; exte

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

16:45 2015/12/8phpunit测试学习 1:一点简单的扼要有用的东西的总结  一点入门认识 具体的入门安装和入门实践请参照文中的推荐博客或网上其他博客推荐博客,我感觉这几篇博客写得很不错,虽然一和二可以结合在一起,内容并不多 且给新手更容易带来学习信心:安装建议参照我的另一篇安装博客,因为当时我是按照这种方式失败的,文中提及网 络原因导致失败,我当时显示的是安装的某个路径似乎没有维护了,那个url已经不存 在了(所以我也不知道是网络原因还是真的那个路径不存在了)(PHP教程:PHP

Struts2框架学习(三) 数据处理

Struts2框架学习(三) 数据处理 Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理. 值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:ValueStack一种数据结构,操作数据的方式为:先进后出 OGNL : Object-GraphNavigation Language(对象图形导航语言)将多个对象的关系使用一种树形的结构展现出来,更像一个图形,那么如果需要对树形结构的节点数据进行操作,那么可以使用 对象.属性 的方式进行操作,OGNL技