Python开源的科学计算基础库
1.表示N维数组对象ndarray
2.线性代数、傅里叶变换、随机数生成
3.广播函数,整合c++、c
一.数据的维度
1.数据
2.数据维度
3.一维数据
(1)特点
(2)Python中的表达方式
列表、集合类型
(3)列表和数组的区别
数据类型要求不一样
4.二维数据
(1)概念,多个一位数据组成,一个以为数据的组合。
(2)列表
5.多维数据
(1)
(2)列表
6.高维数据
(1)仅利用最基本的二元关系展示数据间的复杂关系
(2)字典类型或者数据表示格式
二.numpy库中的N维数组对象ndarray
1.使用numpy数组原因:
(1)节省空间
(2)numpy的底层实现靠c语言实现的,提高运行速度。
代码示例:
2.N维数组对象-ndarray
(1)组成
实际的数据
描述这些数据的元数据(数据维度、数据类型等)
轴、秩
方法 | 功能 |
.ndim | 轴 |
.shape | 秩 |
.size |
元素个数 |
.dtype | 数据类型 |
.itemsize | 元素所占的字节 |
import numpy as np
a=np.array([[0,1,2,3,4],[9,8,7,6,5]])# -*- coding: utf-8 -*-
print(a.ndim)
print(a.shape)
print(a.size)
print(a.dtype)
print(a.itemsize)
输出:
2
(2, 5)
10
int32
4
(2)要求所有的元素类型相同,数组下标从0开始。
(3)实例
(4)支持那么多数据类型原因
(5)不同质数据类型
()
3.ndarray数组的创建方法
(1)从Python的列表、元组等等类型创建ndarray数组
x=np.array(list/tuple),detype=数据类型)
不指定元素类型,根据读入的数据类型确定,根据最高级确定数据类型。
(2)使用numpy中函数创建ndarray数组,如arange,ones,Zeros等
最常用的方法
函数 | 作用 | 具体应用 |
np.arange(n) | 类似range()函数,返回ndarray类型,元素从0到-1 | |
np.ones(shape) | 根据shape生成一个全1数组,shape是元组类型 | np.ones(2,3) |
np.zeros(shape) | 根据shape生成一个全0数组,shape是元组类型 | |
np.full(shape,val) | 根据shape生成一个数组,每个元素值都是val | |
np.eye(n) | 创建一个证放的n*n单位矩阵,对角线为1,其余为0 |
代码示例:
import numpy as np
#arange生成的为整数类型
print(np.arange(10))
#其他的都为浮点数类型
print(np.ones((3,6)))
print(np.zeros((3,6)))
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.]]
生成多维数组
代码示例:
import numpy as np
x=np.ones((2,3,4))
print(x)
print(x.shape)#最外层到最内层元素变化的方式。
输出:
[[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]]
(2, 3, 4)
(3)从字节流(raw bytes)中创建ndarray数组
(4)从文件读取特定格式,创建ndarray数组
(5)数据类型多为浮点数,符合现实计算的思维。
(6)ndarray数组的变换
astype:创建一个新的数组
(7)数组转换为Python中列表
3.ndarray数组的操作
(1)数组的索引和切片
索引:获取数组中特定元素位置的过程(找到元素在数组中的位置)。
切片:获取数组元素子集的过程(获得数组元素一部分)。
示例
一维数组索引:和Python列表中一样。
一维数组的切片:和Python列表切片一样。
多维数组的索引和切片首先要分辨出对象为几维的数组。
多维数组索引:a[1,2,3]表示的是:第一个维度的第二个轴的元素,第二个维度的第三个轴的元素,第三个维度的最后一个轴的第四个位置的元素。(由外而内的去寻找索引位置)
多维数组的切片:a[:,1:3,:],从外而内的寻找切片内容。
代码示例:
import numpy as np
a=np.array([[[1,2,3,4],[5,6,7,8],[9,10,11,12]],[[13,14,15,16],[17,18,19,20],[21,22,23,24]]])
print(a[1,2,3])
print(a[:,1:3,:])
print(a[:,:,::2])
输出:
24
[[[ 5 6 7 8]
[ 9 10 11 12]]
[[17 18 19 20]
[21 22 23 24]]]
[[[ 1 3]
[ 5 7]
[ 9 11]]
[[13 15]
[17 19]
[21 23]]]
可以对创建后的ndarray的维度和元素类型进行变换。
4.ndarray的运算
(1)数组与标量之间的运算
数组与标量之间的运算作用与数组的每一个元素。
代码示例:
(2)numpy中的一元函数,对数组的运算就是对数组中每一个元素的运算。
函数 | 作用 |
np.abs(x) np.fabs(x) | 计算数组各元素的绝对值 |
np.sqrt(x) | 计算数组各元素的平方根 |
np.square(x) | 计算数组各元素的平方 |
np.log(x) 、np.log10(x)、nplog2(x) | 计算数组各元素的自然对数、10底数和2底对数 |
np.ceil(x)、np.floor(x) | 计算数组各元素的ceiling值或floor值 |
代码示例:
import numpy as np
a=np.arange(24).reshape((2,3,4))
np.square(a)
print(a)
a=np.sqrt(a)
print(a)
a=np.modf(a)
print(a)
输出:
特点:进行一元函数操作后会生成一个新的数组,原来的数组没有被改变,想要改变原来的数组需要把改变后的值赋给旧的数组。
(3)numpy的二元函数,对两个数组运算的函数(其实是对两数组中的每个元素的运算)。
代码示例:
import numpy as np
a=np.arange(24).reshape((2,3,4))
b=np.square(a)
c=np.maximum(a,b)
print(c)
print(a>b)
输出:
[[[ 0 1 4 9]
[ 16 25 36 49]
[ 64 81 100 121]]
[[144 169 196 225]
[256 289 324 361]
[400 441 484 529]]]
[[[False False False False]
[False False False False]
[False False False False]]
[[False False False False]
[False False False False]
[False False False False]]]
附件参考资料链接:http://www.cnblogs.com/WSX1994/articles/9061516.html
来源:oschina
链接:https://my.oschina.net/u/3754854/blog/1860617