在学习数据分析时,NumPy作为最基础的数据分析库,我们能够熟练的掌握它是学习数据分析的必要条件。接下来就让我们学习该库吧。

学习NumPy库的环境:

python:3.6.6

编辑器:pycharm

NumPy安装:在cmd命令下,直接使用pip语句,pip install NumPy即可!

NumPy是使用Python进行科学计算的基本软件包。它主要包含一下内容:

  • 有一个强大的N维数组对象ndarray;
  • 拥有复杂的广播功能函数;
  • 整合C/C++和Fortran代码的工具;
  • 线性代数、傅里叶变换、随机数生成等功能。

具体的内容可参考NumPy官网信息:点击官网

Python基础数据类型中是没有数组概念,NumPy库能够很好的满足了数组缺失,数组对象的优点有:

  1. 数组对象可以去掉元素间运算的循环,使一维向量更像单个数据;
  2. 设置专门的数组对象,经过优化,可以提升这类应用的运算速度;
  3. 数组对象采用相同的数据类型,有助于节省运算和存储空间。

 一、ndarray的介绍

1、ndarray的构成:

ndarray有两部分构成,一是实际数据;二是描述这些数据的元数据(数据维度、数据类型等)。ndarray数组一般要求所有元素类型相同(同质),数组的下标从0开始。

其中轴(axis):保存数组的维度;秩(rank):轴的数量

2、ndarray对象的属性:

.ndim:秩,即轴的数量或维度的数量;

.shape:ndarray对象的尺度,对于矩阵,n行m列;

.size:ndarray对象元素的个数,相当于.shape的n*m的值;

.dtype:ndarray对象的元素类型;
.itemsize:ndarray对象中每个元素的大小,以字节为单位。

如下举例说明:

求数组a的平方和数组b的立方和:

import numpy as np

def npSum():
a = np.array([0, 1, 2, 3, 4])
b = np.array([9, 8, 7, 6, 5])
c = a ** 2 + b ** 3
return c print(npSum())
[729 513 347 225 141]

如下是ndarray属性的练习:

import numpy as np
a = np.array([[0, 1, 2, 3, 4], [9, 8, 7, 6, 5]])
print(a)
print(a.ndim)
print(type(a))
print(a.shape)
print(a.size)
print(a.dtype)
print(a.itemsize) [[0 1 2 3 4]
[9 8 7 6 5]]
2
<class 'numpy.ndarray'>
(2, 5)
10
int32
4

3、ndarray数组的创建方法:

  • 从python中的列表、元组等类型创建ndarray;
  • 使用NumPy中函数创建ndarray数组,如arange,ones,zeros;
  • 从字节流(raw bytes)中创建ndarray数组;
  • 从文件中读取特定的格式创建ndarray数组。

如下举例说明:

①、从python中的列表、元组等类型创建ndarray数组:

 import numpy as np
x = np.array([[1, 2], [9, 8], (0.1, 0.2)])
print(x)
print(x.shape)
print(x.size) [[1. 2. ]
[9. 8. ]
[0.1 0.2]]
(3, 2)
6

②、使用NumPy中函数创建ndarray数组:

np.arange(n)            类似range()函数,返回ndarray类型,元素从0到n-1;
np.ones(shape) 根据shape生成一个全1数组,shape是元组类型;
np.zeros(shape) 根据shape生成一个全0数组,shape是元组类型;
np.full(shape, val) 根据shape生成一个数组,每个元素值都是val;
np.eye(n) 创建一个正方的n*n单位矩阵,对角线为1,其余为0;
类似函数
np.ones_like(a) 根据数组a的形状生成一个全1数组
np.zeros_like(a) 根据数组a的形状生成一个全0数组
np.full_like(a,val) 根据数组a的形状生成一个数组,每个元素值都是val np.linspace() 根据起止数据等间距地填充数据,形成数组
np.concatenate() 将两个或多个数组合并成一个新的数组

 import numpy as np

 print(np.arange(10))
print(np.ones((3, 6)))
print(np.zeros((3, 6), dtype=np.int32))
print(np.eye(5)) [0 1 2 3 4 5 6 7 8 9]
[[1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1.]]
[[0 0 0 0 0 0]
[0 0 0 0 0 0]
[0 0 0 0 0 0]]
[[1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]]

 #不限制数据类型的时候生成的是浮点数
a = np.linspace(1, 10, 4)
print(a)
# endpoint 是指最后一个元素是否是生成的四个元素中的一个
b = np.linspace(1, 10, 4, endpoint=False)
print(b)
c = np.concatenate((a, b))
print(c) [ 1. 4. 7. 10.]
[1. 3.25 5.5 7.75]
[ 1. 4. 7. 10. 1. 3.25 5.5 7.75]

4、数组的变换

对于创建后的ndarray数组,可以对其进行维度变换和元素类型变换:

ndarray数组的维度变换
.reshape(shape) 不改变数组元素,返回一个shape形状的数组,原数组不变
.resize(shape) 与.reshape()功能一致,但修改原数组
.swapaxes(ax1, ax2) 将数组n个维度中的两个维度进行调换
.flatten() 对数组进行降维,返回折叠后的一维数组,原数组不变
 a = np.ones((2, 3, 4), dtype=np.int32)
print(a)
print(a.reshape((3, 8)))
print(a.resize((3, 8)))
print(a)
print(a.flatten()) [[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]] [[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]]
[[1 1 1 1 1 1 1 1]
[1 1 1 1 1 1 1 1]
[1 1 1 1 1 1 1 1]]
None
[[1 1 1 1 1 1 1 1]
[1 1 1 1 1 1 1 1]
[1 1 1 1 1 1 1 1]]
[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]

# astype()方法一定会创建新的数组(原始数组的一个拷贝),即使两个类型一致

 a = np.ones((2, 3, 4),  dtype=np.int)
print(a)
b = a.astype(np.float)
print(b) [[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]] [[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]]
[[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]] [[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]]

5、ndarray数组向列表的转换

 import numpy as np

 a = np.full((2, 3, 4), 25, dtype=np.int32)
print(a)
print(a.tolist()) [[[25 25 25 25]
[25 25 25 25]
[25 25 25 25]] [[25 25 25 25]
[25 25 25 25]
[25 25 25 25]]]
[[[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]], [[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]]]

(一)初识NumPy库(数组的创建和变换)的更多相关文章

  1. (二)初识NumPy库(数组的操作和运算)

    本章主要介绍的是ndarray数组的操作和运算! 一. ndarray数组的操作: 操作是指对数组的索引和切片.索引是指获取数组中特定位置元素的过程:切片是指获取数组中元素子集的过程. 1.一维数组的 ...

  2. 初识NumPy库-基本操作

    ndarray(N-dimensional array)对象是整个numpy库的基础. 它有以下特点: 同质:数组元素的类型和大小相同 定量:数组元素数量是确定的 一.创建简单的数组: np.arra ...

  3. 初识numpy库

    numpy是一个在Python中做科学计算的基础库,重在数值计算,也是大部分Python科学计算库的基础库,多用于在大型.多维数组上执行数值运算 numpy创建数组(矩阵): numpy中的数据类型: ...

  4. 初识Java——一维数组的创建及使用

    数组作为对象是允许使用new关键字进行内存分配的,在使用数组前,必须首先定义数组的变量所属的类型.一维数组的创建有两种方法: 1,先声明,再用new运算符进行内存分配 数组元素类型+数组名字[] 数组 ...

  5. $python数据分析基础——初识numpy库

    numpy库是python的一个著名的科学计算库,本文是一个quickstart. 引入:计算BMI BMI = 体重(kg)/身高(m)^2 假如有如下几组体重和身高数据,让求每组数据的BMI值: ...

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

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

  7. ndarray 数组的创建和变换

    ndarray数组的创建方法 1.从python中的列表,元组等类型创建ndarray数组 x = np.array(list/tuple) x = np.array(list/tuple,dtype ...

  8. Python 学习笔记之 Numpy 库——数组基础

    1. 初识数组 import numpy as np a = np.arange(15) a = a.reshape(3, 5) print(a.ndim, a.shape, a.dtype, a.s ...

  9. numpy库数组拼接np.concatenate的用法

    concatenate功能:数组拼接 函数定义:numpy.concatenate((a1, a2, ...), axis=0, out=None)

随机推荐

  1. udp协议以及socketserver

    udb协议 udb协议也是一种协议,它和tcp相比既有缺点也有优点 udb协议所发送的数据可以理解为自带报头,所以他不会出现粘包的情况.但是udp数据只管发送而不管接收,也就是说udp会出现丢包的情况 ...

  2. 微信小程序——动态修改页面数据(和样式)及参数传递

    1.1.1动态修改页面数据 在小程序中我们经常要动态渲染数据,对于新手而言我们常常遇到修改的数据在控制台显示和页面显示不一致,因为我们用“=”修改数据的,这种是可以修改,但无法改变页面的状态的,还会造 ...

  3. MySQL数据库开发的36条原则【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  4. universal link使用

    iOS9之后,苹果推出了universal link方案,该方案较url scheme有明显的改善.url scheme很难做到唯一. 而 universal link却是你自己控制的. 1.有一个H ...

  5. iOS本地数据存储

    http://www.jianshu.com/p/a3eeae99e902 大牛整理的超全

  6. JavaScript+HTML+CSS 无缝滚动轮播图的两种方式

    第一种方式 在轮播图最后添加第一张,一张重复的图片. 点击前一张,到了第一张,将父级oList移动到最后一张(也就是添加的重复的第一张),在进行后续动画. 点击下一张,到了最后一张(也就是添加的重复的 ...

  7. 最新28道java基础面试题-上

    28道java基础面试题 1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪 ...

  8. CrazyBingo mini VIP 2.0 视频开发板 NIOS移植例程(原创)

    创建一个NIOS环境 注意事项 前言:(先了解下硬件) 本板卡目前主要适合以下几类人: (1)对FPGA 逻辑开发有强烈的兴趣,并且有一定的HDL基础 (2)计划采用FPGA图像架构,学习并研究图像算 ...

  9. Python3 并发编程3

    目录 GIL全局解释器锁 基本概念 多线程的作用 死锁现象 递归锁 信号量 线程队列 GIL全局解释器锁 基本概念 global interpreter lock 全局解释器锁 GIL不是Python ...

  10. 【React】393 深入了解React 渲染原理及性能优化

    如今的前端,框架横行,出去面试问到框架是常有的事. 我比较常用React, 这里就写了一篇 React 基础原理的内容, 面试基本上也就问这些, 分享给大家. React 是什么 React是一个专注 ...