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

前言:排版有点问题,哎!

进一步学习,请参考https://www.numpy.org.cn/

数据类型

5种类型:布尔值(bool),整数(int),无符号整数(uint)、浮点(float)、复数(complex)

支持的原始类型与 C 中的原始类型紧密相关:

Numpy 的类型 C 的类型 描述
np.bool bool 存储为字节的布尔值(True或False)
np.byte signed char 平台定义
np.ubyte unsigned char 平台定义
np.short short 平台定义
np.ushort unsigned short 平台定义
np.intc int 平台定义
np.uintc unsigned int 平台定义
np.int_ long 平台定义
np.uint unsigned long 平台定义
np.longlong long long 平台定义
np.ulonglong unsigned long long 平台定义
np.half / np.float16 - 半精度浮点数:符号位,5位指数,10位尾数
np.single float 平台定义的单精度浮点数:通常为符号位,8位指数,23位尾数
np.double double 平台定义的双精度浮点数:通常为符号位,11位指数,52位尾数。
np.longdouble long double  平台定义的扩展精度浮点数  
np.csingle float complex 复数,由两个单精度浮点数(实部和虚部)表示
np.cdouble double complex 复数,由两个双精度浮点数(实部和虚部)表示。
np.clongdouble long double complex 复数,由两个扩展精度浮点数(实部和虚部)表示。

由于其中许多都具有依赖于平台的定义,因此提供了一组固定大小的别名:

注:类型代码一般是头一个字母+位数/8,如complex256位c32

Numpy 的类型 C 的类型 类型代码 描述
np.int8 int8_t i1 字节(-128到127)
np.int16 int16_t i2 整数(-32768至32767)
np.int32 int32_t i4 整数(-2147483648至2147483647)
np.int64 int64_t i8 整数(-9223372036854775808至9223372036854775807)
np.uint8 uint8_t u1 无符号整数(0到255)
np.uint16 uint16_t u2 无符号整数(0到65535)
np.uint32 uint32_t u4 无符号整数(0到4294967295)
np.uint64  uint64_t u8 无符号整数(0到18446744073709551615)
np.intp intptr_t 用于索引的整数,通常与索引相同 ssize_t
np.uintp uintptr_t 整数大到足以容纳指针
np.float32 float f或f4 8位指数
np.float64 / np.float_ double f8 请注意,这与内置python float的精度相匹配。
np.complex64 float complex c8 复数,由两个32位浮点数(实数和虚数组件)表示
np.complex128 / np.complex_ double complex c16 请注意,这与内置python 复合体的精度相匹配。

创建、操作narray

import numpy as np
#新版本
x1 = np.int8([0,1,2,3,4,5,6,7,8,9])
x2 = np.arange(10, dtype=np.int8)
x1, x2
(array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int8),
 array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int8))
#老版本
y1 = np.array(np.arange(9), dtype=np.int8)
y2 = np.array(np.arange(9), dtype=‘i1‘)
y1, y2
"""
新手最容易犯的一个错误就是把数组内容直接当做参数传给array,如np.array(1,2,3)
"""
‘\n\xe6\x96\xb0\xe6\x89\x8b\xe6\x9c\x80\xe5\xae\xb9\xe6\x98\x93\xe7\x8a\xaf\xe7\x9a\x84\xe4\xb8\x80\xe4\xb8\xaa\xe9\x94\x99\xe8\xaf\xaf\xe5\xb0\xb1\xe6\x98\xaf\xe6\x8a\x8a\xe6\x95\xb0\xe7\xbb\x84\xe5\x86\x85\xe5\xae\xb9\xe7\x9b\xb4\xe6\x8e\xa5\xe5\xbd\x93\xe5\x81\x9a\xe5\x8f\x82\xe6\x95\xb0\xe4\xbc\xa0\xe7\xbb\x99array\xef\xbc\x8c\xe5\xa6\x82np.array(1,2,3)\n‘
#要转换数组的类型,请使用 .astype() 方法(首选)或类型本身作为函数
x1.astype(‘u1‘), x2.astype(int),np.int16(y1), np.uint16(y2)
(array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=uint8),
 array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]),
 array([0, 1, 2, 3, 4, 5, 6, 7, 8], dtype=int16),
 array([0, 1, 2, 3, 4, 5, 6, 7, 8], dtype=uint16))
#dtype属性,代表数组的类型;shape属性,代表数组的形状;ndim属性,代表数组有几个维度
#size属性:代表数组中元素的个数, itemsize属性:代表数组中单个元素以字节计的大小
#data属性:数组中实际的数据
z = np.arange(15).reshape((3,5))
z.shape, z.dtype, z.ndim, z.size, z.itemsize, z.data, np.issubdtype(z.dtype, np.integer), np.issubdtype(z.dtype, np.floating)
((3L, 5L),
 dtype(‘int32‘),
 2,
 15,
 4,
 <read-write buffer for 0x0000000007485580, size 60, offset 0 at 0x000000000745BC38>,
 True,
 False)

溢出错误

当值需要比数据类型中的可用内存更多的内存时,例如,numpy.power对于64位整数正确计算 100 10 8,但对于32位整数给出1874919424(不正确)。

np.power(100, 8, dtype=np.int64), np.power(100, 8, dtype=np.int32)
(10000000000000000, 1874919424)
# NumPy分别提供numpy.iinfo 并numpy.finfo 验证NumPy整数和浮点值的最小值或最大值:
np.iinfo(np.int), np.iinfo(np.int32), np.iinfo(np.int64)
(iinfo(min=-2147483648, max=2147483647, dtype=int32),
 iinfo(min=-2147483648, max=2147483647, dtype=int32),
 iinfo(min=-9223372036854775808, max=9223372036854775807, dtype=int64))

创建数组有5种常规机制:

1、从其他Python结构(例如,列表,元组)转换
2、numpy原生数组的创建(例如,arange、ones、zeros等)
3、从磁盘读取数组,无论是标准格式还是自定义格式
4、通过使用字符串或缓冲区从原始字节创建数组
5、使用特殊库函数(例如,random)

Ones 和 zeros 填充方式

注:[,]里面是可选参数,如:empty(shape[, dtype, order]) ,shape是必选参数,dtype, order是可选参数

方法 描述
empty(shape[, dtype, order]) 返回给定形状和类型的新数组,而无需初始化条目。
empty_like(prototype[, dtype, order, subok, …]) 返回形状和类型与给定数组相同的新数组。
eye(N[, M, k, dtype, order]) 返回一个二维数组,对角线上有一个,其他地方为零。
identity(n[, dtype]) 返回标识数组。
ones(shape[, dtype, order]) 返回给定形状和类型的新数组,并填充为1。
ones_like(a[, dtype, order, subok, shape]) 返回形状与类型与给定数组相同的数组。
zeros(shape[, dtype, order]) 返回给定形状和类型的新数组,并用零填充。
zeros_like(a[, dtype, order, subok, shape]) 返回形状与类型与给定数组相同的零数组。
full(shape, fill_value[, dtype, order]) 返回给定形状和类型的新数组,并用fill_value填充。
full_like(a, fill_value[, dtype, order, …]) 返回形状和类型与给定数组相同的完整数组。

从现有的数据创建

方法 描述
array(object[, dtype, copy, order, subok, ndmin]) 创建一个数组。
asarray(a[, dtype, order]) 将输入转换为数组。
asanyarray(a[, dtype, order]) 将输入转换为ndarray,但通过ndarray子类。
ascontiguousarray(a[, dtype]) 返回内存中的连续数组(ndim > = 1)(C顺序)。
asmatrix(data[, dtype]) 将输入解释为矩阵。
copy(a[, order]) 返回给定对象的数组副本。
frombuffer(buffer[, dtype, count, offset]) 将缓冲区解释为一维数组。
fromfile(file[, dtype, count, sep, offset]) 根据文本或二进制文件中的数据构造一个数组。
fromfunction(function, shape, **kwargs) 通过在每个坐标上执行一个函数来构造一个数组。
 fromiter(iterable, dtype[, count]) 从可迭代对象创建一个新的一维数组。  
fromstring(string[, dtype, count, sep]) 从字符串中的文本数据初始化的新一维数组。
loadtxt(fname[, dtype, comments, delimiter, …]) 从文本文件加载数据。

注:可通过np.array?来查看相关函数的说明

#zero和ones代码实现
"""
zero:创建所有元素为0的数组
ones:创建所有元素为1的数组
empty:创建所有元素为随机的数组 *****
"""
np.empty([2, 2], dtype=int), np.empty((3, 3)),np.empty_like(([1,2,3], [4,5,6])),np.eye(4)
(array([[43998544,        0],
        [62099504,        0]]), array([[0.22222222, 0.44444444, 0.66666667],
        [0.88888889, 1.11111111, 1.33333333],
        [1.55555556, 1.77777778, 2.        ]]), array([[         0, 1073741824,          0],
        [1074790400,          0, 1075314688]]), array([[1., 0., 0., 0.],
        [0., 1., 0., 0.],
        [0., 0., 1., 0.],
        [0., 0., 0., 1.]]))
#因为浮点数的有限精度问题,array返回的数组可能无法预知,因此出现浮点数时,最好用linspace
np.arange(10,100,10),np.linspace(0,2,10)
(array([10, 20, 30, 40, 50, 60, 70, 80, 90]),
 array([0.        , 0.22222222, 0.44444444, 0.66666667, 0.88888889,
        1.11111111, 1.33333333, 1.55555556, 1.77777778, 2.        ]))

打印数组

打印出来非常类似嵌套列表
如果数组太长,则会自动忽略部数据,只打印首位
print np.arange(24).reshape(2,3,4),np.arange(1000000)
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]] [     0      1      2 ... 999997 999998 999999]

基本操作

在数组上进行算术操作都是元素级别的(elementwise)。

注:在线性代数中,乘号*代表的矩阵乘法,但在numpy中代表元素级别乘法,矩阵乘法用np.dot(a,b)或a.dot(b)

若a+=b,a是int,b是float,则会报错,因为b比a更精错,但b+=a则不会报错

a = np.array([1,2,3,4])
b = np.arange(4)
a-b, a+b, a*b, a*2, a/3,a.dot(b) #全部新增的一个数组
(array([1, 1, 1, 1]),
 array([1, 3, 5, 7]),
 array([ 0,  2,  6, 12]),
 array([2, 4, 6, 8]),
 array([0, 0, 1, 1]),
 20)

ndarray内置函数:sum,min,max,comsum,并且可以通过制定axis=0或1来指定对行或者列操作

通用函数

一元ufunc

函数 说明
abs、fabs 计算整数、浮点数或复数的绝对值。对于非复数,fabs更快
sqrt 计算各元素的平方根
square 计算各元素的平方
exp 计算各元素的指数eX
log、log10、log2、log1P 分别对自然对数,,底数分别为e、10、2、1+x(eX
sign 计算各元素的正负号:1(正数)、-1(负数)
floor 计算各元素小于等于该值的最大整数
ceil 计算各元素大于等于该值的最小整数
rint 将各元素四舍五入到最接近的整数,保留dtype
modf 将数组的小数与整数部分分别以两个独立的数组形式返回
isnan 返回哪些值是nan的布尔型数组
isfinite、isinf 返回哪些数组是有穷或无穷的布尔型数组
cos、cosh、sin、sinh、tan、tanh 普通和双曲三角函数
arccos、arccosh、arcsin、arcsinh、arctan、arctanh 反三角函数
logical_not 计算各元素not x的真值。相当于-arr

二元ufunc

函数 说明
add 将数组中对应的元素相加
subtract 从第一个数组中减去第二个数组中的元素
multiply 数组元素相乘
divide、floor_divide 除法或除不要余数
power 第一个元素A,根据第二个相应的元素计算AB
 
maximum、fmax、minimum、fmin 元素最大值和最小值计算。fmax和fmin将忽略NaN
mod 除法求余数
copysign 将第二个数组中的符号复制给第一个数组中的值
greater、greater_equal、less、less_equal、equal、not_equal 比较运算,产生布尔型数组。依次> >= < <= == !=
logical_and、logical_or、logical_xor 真值逻辑运算。与或非

索引、切片以及遍历

一维数组非常类似与python的list和tuple,它们可以被index、slice、iterate copy方法可以复制数组和标量值

c = np.arange(10)
c,c[0],c[1:3],c[:5],c[5:],c[:-1],c[:]
(array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]),
 0,
 array([1, 2]),
 array([0, 1, 2, 3, 4]),
 array([5, 6, 7, 8, 9]),
 array([0, 1, 2, 3, 4, 5, 6, 7, 8]),
 array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]))

跟列表最重要的区别在于,数组的切片的数据不会复制,任何修改都会反馈到元数据上

c1 = c[4:6]
c1[:] = 111
c
array([  0,   1,   2,   3, 111, 111,   6,   7,   8,   9])
#二维数组的索引和切片
d = np.arange(16).reshape((4,4))
d[1][0],d[0,1]
(4, 1)
#布尔型索引
#布尔型索引在多维数组里面经常会跟上面的数字索引方法混用
e = np.array([‘a‘,‘b‘,‘c‘,‘e‘,‘f‘,‘g‘,‘h‘,‘i‘,‘j‘,‘k‘])
e == ‘e‘,c[e == ‘f‘],c[e != ‘e‘],c[(e == ‘f‘)|(e != ‘f‘)]
(array([False, False, False,  True, False, False, False, False, False,
        False]),
 array([111]),
 array([  0,   1,   2, 111, 111,   6,   7,   8,   9]),
 array([  0,   1,   2,   3, 111, 111,   6,   7,   8,   9]))

元素的形状

可以通过reshape(创建新数组)、resize(改变原数组)、ravel(使数组变扁平)

将不同的数组堆叠(stacking)起来

多个数组可以沿着不同的额轴堆叠起来,用vstack(竖向)、hstack(横向)

将一个数组切分成多个

使用hsplit或vsplit将一个数组沿制定方向切分split(array,(x,y))切分为x列和y列,split(array,n)切分为n个数组

拷贝与视图

1、简单的赋值不发生拷贝;函数调用也不会产生拷贝 2、不同数据对象可以共享相同的数据,view方法新建一个数组,但是仍使用相同的数据 3、深拷贝:copy

广播

在NumPy中如果遇到大小不一致的数组运算,就会触发广播机制。满足一定的条件才能触发广播,不然也会报错。

形状相同

形状相同的数组之间的运算就是在对应位做运算。

形状不同

当数组大小不一致时,就会触发广播机制。广播机制的规则:

1.让所有输入数组都向其中shape最长的数组看齐,shape中不足的部分都通过在前面加1补齐;

2.输出数组的shape是输入数组shape的各个轴上的最大值;

3.如果输入数组的某个轴和输出数组的对应轴的长度相同或者其长度为1时,这个数组能够用来计算,否则出错;

4.当输入数组的某个轴的长度为1时,沿着此轴运算时都用此轴上的第一组值。

原文地址:https://www.cnblogs.com/CQ-LQJ/p/11823959.html

时间: 2024-10-31 22:22:46

【大数据技术能力提升_2】numpy的学习的相关文章

周鸿祎:以大数据技术对抗大数据平台安全威胁

1月,中国大陆境内所有通用顶级域(.com/.net/.org等)解析出现问题,所有相关域名均被指向一个位于美国的IP地址(65.49.2.178),导致数千万网民在数小时内无法访问网站. 4月,OpenSSL"心脏出血(Heartbleed)"重大安全漏洞被曝光,这一漏洞让黑客能够读取服务器系统的运行内存.有业内人士利用该漏洞在某知名电商网站上测试时,成功获得多位用户的账号及密码,并成功登陆网站. 9月,"iCloud艳照门"事件爆发,数百张好莱坞女演员不雅照在网

大数据学习路线图 让你精准掌握大数据技术学习?

大数据指不用随机分析法这样捷径,而采用所有数据进行分析处理的方法.互联网时代每个企业每天都要产生庞大的数据,对数据进行储存,对有效的数据进行挖掘分析并应用需要依赖于大数据开发,大数据开发课程采用真实商业数据源并融合云计算+机器学习,让学员有实力入职一线互联网企业. 今天小编的技术分享详细学习大数据的精准路线图,学好大数据就还得靠专业的工具. 大数据学习QQ群:119599574 阶段一. Java语言基础 Java开发介绍.熟悉Eclipse开发工具.Java语言基础.Java流程控制.Java

大数据学习路线 让你精准掌握大数据技术学习

大数据指不用随机分析法这样捷径,而采用所有数据进行分析处理的方法.互联网时代每个企业每天都要产生庞大的数据,对数据进行储存,对有效的数据进行挖掘分析并应用需要依赖于大数据开发,大数据开发课程采用真实商业数据源并融合云计算+机器学习,让学员有实力入职一线互联网企业. 今天小编的技术分享详细学习大数据的精准路线图,学好大数据就还得靠专业的工具. 阶段一. Java语言基础 Java开发介绍.熟悉Eclipse开发工具.Java语言基础.Java流程控制.Java字符串.Java数组与类和对象.数字处

ODI 12.1.3发布,提升支持大数据的能力

此次发布的ODI新版本,目的是更好的支持当前市场上的大数据平台. 大数据基因在不改变ODI工作效率的情况下,ODI增加了越来越多的数据源集成能力.ODI是在Oracle平台上标准的E-LT工具,事实上也是Oracle各个应用软件的数据集成工具.因此,与时俱进,增加对市场上当前流行数据源的集成是必然的,此次增加的有:1. 支持JSON2. 集成Hadoop SQOOP3. 集成HbaseODI现在支持在关系型数据库与HDFS, Hive, HBase之间相互导数.通过增强ODI的知识模块来来加强数

视频大数据技术在智慧城市中的应用

现代社会的信息量正以飞快的速度增长,这些信息里又积累着大量的数据.预计到2025年,每年产生的数据信息将会有超过1/3的内容驻留在云平台中或借助云平台处理.我们需要对这些数据进行分析和处理,以获取更多有价值的信息.在未来的"智慧城市"中,会有越来越大的结构化以及非结构化的数据.那么我们如何高效地存储和管理这些数据,如何分析这些数据呢?答案是,我们需要强有力的大数据处理系统进行支撑. 作为目前最火热的词汇之一,大数据在各个领域都已有了较为成熟的应用.在视频监控领域,大数据时代正悄悄来临.

痛客平台大数据技术助推贵阳“一企一策”

痛客平台大数据技术助推贵阳"一企一策" 当前中国,正在实施供给侧结构性改革,将经济增长动力点由消费者需求回归于企业方的供给.在这样的背景下,贵州省贵阳市正在实施"一企一策"工作.针对贵阳市的工业领域企业,开展相关企业的转型升级工作,落实国家供给侧结构性改革. "一企一策"工作旨在明确企业转型升级的重点方向,编制转型升级方案.而痛客平台致力于用众包方式解决各行业企业痛点,突破技术瓶颈.引领企业升级.在供给侧结构性改革的大背景下,痛客平台与"

不只是Hadoop:大数据技术的未来道路

在实时数据的世界当中,我们为什么还要执着于Hadoop这一片森林? 作为一套以批量处理为主要诉求的架构方案,Hadoop仍然堪称大数据技术领域的荣耀长子.然而根据451研究集团的调查数据显示,其实际普及效果仍然不及显赫的声誉. 那些已经率先部署了Hadoop解决方案的企业可能希望稍稍放慢自己的前进脚步.伴随着Apache Spark以及其它一系列技术方案的出台(包括Storm.Kafka等等),我们似乎与Hadoop的批量处理思路渐行渐远.转而踏上了一条真正通往实 时性未来的发展道路. 批量并非

深刻解读大数据技术在工业界的应用

大数据及其价值 大数据是近几年非常热门的一个概念.到底什么叫做大数据呢?简单而言,就是具备4V属性的数据: Volume:量非常大,大到一台计算机所无法处理的数据: Variety:来源广泛,包括文本.图像.语音.机器传感器信号.日算计程序日志等: Velocity:产生速度非常快: Veracity:准确性要求高. 关于大数据,有许多大家耳熟能详的经典案例,比如沃尔玛的"啤酒和尿布"案例:Target商场预测17岁女孩怀孕的等. *对大数据的概念都是模糊不清的,大数据是什么,能做什么

大数据技术之大数据概论

一.大数据概念 大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉.管理和处理的数据集合,是需要新处理模式才能具有更强的决策力.洞察发现力和流程优化能力的海量.高增长率和多样化的信息资产. 最小的基本单位是bit,按顺序给出所有单位:bit.Byte.KB.MB.GB.TB.PB.EB.ZB.YB.BB.NB.DB. 二.大数据的特点 1)Volume(大量):截至2017年,人类生产的所有印刷材料的数据量是200PB,而历史上全人类总共说过的话的数据量大约是5EB.当前,