在学习数据分析时,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. 特殊权限set_uid、set_gid、stick_bit、软链接、硬链接文件 使用介绍

    第2周第4次课(3月29日) 课程内容:2.18 特殊权限set_uid2.19 特殊权限set_gid2.20 特殊权限stick_bit2.21 软链接文件2.22 硬链接文件     2.18  ...

  2. libnl的移植

    libnl简介 libnl是为了方便应用程序使用netlink接口而开发的一个库.这个库为原始netlink消息传递以及不同的netlink,family专用接口提供了一个统一的接口.libnl2.0 ...

  3. 浅谈css样式之list-type

    在我们的工作学习中,大多数人使用列表标签的时候总一般的选择是把list-type设置成none.不过可能很多人对于这个属性的细节并没有很深的了解.甚至会把list-type和list-type-sty ...

  4. KETTLE单表同步,写入EXCEL和TXT

    以下操作都在5.0.1版本下进行开发,其余版本可以进行自动比对 在平时工作当中,会遇到这种情况,而且很常见.比如:1.自动生成文件TXT或者EXCEL(电信行业该需求居多),上传至某服务器:2.双方数 ...

  5. Sql增加,删除,修改列

    1. 查看约束条件 - MySQL: SELECT * FROM information_schema.`TABLE_CONSTRAINTS` where table_name = 'book'; - ...

  6. 详解OS X和iOS图像处理框架Core Image

    转自:http://www.csdn.net/article/2015-02-13/2823961-core-image 摘要:本 文结合实例详解了OS X和iOS图像处理框架Core Image的使 ...

  7. 第4节:Java基础 - 必知必会(中)

    第4节:Java基础 - 必知必会(中) 本小节是Java基础篇章的第二小节,主要讲述抽象类与接口的区别,注解以及反射等知识点. 一.抽象类和接口有什么区别 抽象类和接口的主要区别可以总结如下: 抽象 ...

  8. Day 01 Markdown基本语法

    目录 Markdown基本语法 标题 一级标题 二级标题 三级标题 加粗 斜体 高亮 上标 下标 代码引用(>式) 代码引用(```式) 代码引入(`式) 插入链接(链接显示) 插入链接(链接描 ...

  9. 【Cute-Webpack】Webpack4 入门手册(共 18 章)

    介绍 1. 背景 最近和部门老大,一起在研究团队[EFT - 前端新手村]的建设,目的在于:帮助新人快速了解和融入公司团队,帮助零基础新人学习和入门前端开发并且达到公司业务开发水平. 本文也是属于[E ...

  10. JQuery 操作checkbox

    获取checkbox选中的状态 deleteAll全选的name 1. $("input[name='deleteAll']").is(":checked") ...