python读取⽂件中的数据为⼆维数组变量_Numpy多维数据数
组的实现
numpy包(模块)⼏乎总是⽤于Python中的数值计算。这个软件包为Python提供了⾼性能的向量、矩阵、张量数据类型。它是在C和Fortran中创建的,因此当计算被⽮量化(⽤矩阵和⽮量表⽰操作)时,性能很⾼。
1.模块的导⼊:
%matplotlib inline
import matplotlib.pyplot as plt
from numpy import *
2.数组创建numpy
有⼏种初始化numpy数组的⽅法,例如:使⽤Python的list或tuple。使⽤旨在创建Numpy数组的函数,如arrange、linspace等。从⽂件中读取数据(例如Python pickle格式)
2.1根据列表创建numpy.array
v = array([1,2,3,4])
v
M = array([[1, 2], [3, 4]])
M
v和M 都是ndarray类型的对象,由numpy模块创建。
type(v), type(M)
v数组和M数组的区别在于它们的尺⼨(形式)。我们可以使⽤ndarray.shape属性来获取⼤⼩信息。
v.shape
M.shape
矩阵中元素的数量可以通过属性ndarray.size
M.size
也可以使⽤numpy⽅法numpy.shape 和 numpy.size
shape(M)
size(M)
numpy.ndarray 看起来像⼀个普通的 Python 列表。使⽤它们⽽不是Python列表有⼏个原因。
Python的列表是⾮常常见的。它们可以包含任何对象。他们是动态类型化的。它们不⽀持矩阵和诗词作品等数学运算。由于动态类型的原因,在Python中⽤list实现这种操作并不是很有效。
Numpy数组是静态类型化和同质化的。元素类型是在创建数组时定义的(那么数组数据类型可以改变)。
Numpy数组不是很耗费内存。
得益于静态类型化,数学函数如乘积和numpy数组的和可以在编译语⾔中实现(使⽤C和Fortran)。使⽤ndarray数组的dtype(数据类型)属性,我们可以看到数组的数据类型。
M.dtype
试图分配⼀个错误类型(不⼀样的类型)的值会导致错误。
M[0,0] = "hello"
创建数组时,可以分别指定数据类型。
M = array([[1, 2], [3, 4]], dtype=complex)
M
通常使⽤以下dtype值:int、float、complex、bool、object等。
我们也可以⽤⽐特来指定⼤⼩:int64、int16、float128、complex128。
3.使⽤函数⽣成数组
使⽤python列表来指定⼤型数组是不切实际的。你可以使⽤各种Numpy⽅法。
3.1arrange
x = arange(0, 10, 1) # arguments: start, stop, step
x
x = arange(-1, 1, 0.1)
x
3.2linspace 和 logspace
使⽤linspace,区间的两端都被包括在内,参数:(开始,停⽌,点的数量)
linspace(0, 10, 25)
logspace(0, 10, 10, base=e)
3.3mgrid
x, y = mgrid[0:5, 0:5]
x
y
3.4随机数
#导⼊所需模块
from numpy import random
#区间[0,1]内的均匀分布数。
random.rand(5,5)
#来⾃于正态分布的随机数
random.randn(5,5)
3.6diag
#对⾓矩阵
diag([1,2,3])
#偏移对⾓矩阵
diag([1,2,3], k=1)
3.5零和单位矩阵
zeros((3,3))
ones((3,3))
4.⽂件导⼊和导出
4.1逗号分隔的值(CSV)
⼀个⾮常常见的数据存储格式是CSV,以及类似的格式,如TSV(制表分隔值)。要从这些⽂件中读取数据,你可以使⽤以下⽅法fromtxt
data = genfromtxt('stockholm_td_adj.dat')
data.shape
fig, ax = plt.subplots(figsize=(14,4))
ax.plot(data[:,0]+data[:,1]/12.0+data[:,2]/365, data[:,5])
ax.axis('tight')
ax.set_title('Температура в Стокгольме')
ax.set_xlabel('год')
ax.set_ylabel('температура (C)');
使⽤numpy.savetxt我们可以将数组保存在CSV中。
M = random.rand(3,3)
M
savetxt("random-matrix.csv", M)
savetxt("random-matrix.csv", M, fmt='%.5f') # fmt 指定格式
4.2numpy数组的主要⽂件格式。
保存和读取的⽅法numpy.save 和 numpy.load
save("random-matrix.npy", M)
python怎么读取dat文件load("random-matrix.npy")
4.3numpy数组的其他属性
M.itemsize#每个byte中的单元数
M.nbytes#byte数⽬
M.ndim#单位数,计数
5.使⽤数组
5.1编制索引
你可以使⽤⽅括号和索引来选择数组的元素。
# v是⼀个只有⼀个维度的向量,所以⼀个索引就⾜以获得元素。
v[0]
# M是⼀个矩阵(⼆维数组),所以需要两个索引(⾏,列)。
M[1,1]
如果我们省略了多维数组中的索引,就会返回⼀些值(⼀般情况下,N-1维的数组)。
M
M[1]
M[1,:]#第⼀⾏
M[:,1]#第⼀列
使⽤索引,你可以为单个数组元素赋值。
M[0,0] = 1
M
也适⽤于⾏和列
#也适⽤于⾏和列
M[1,:] = 0
M[:,2] = -1
M
5.2选择数组的⼀部分
你可以使⽤M[lower:uperior:step]语法来获取⼀个数组的⼀部分。
A = array([1,2,3,4,5])
A
A[1:3]
数组的部分是可变的:如果给它们分配新的值,那么从它们提取的数组就会改变原来的数组。A[1:3] = [-2,-3]
A
我们可以省略M[lower:upper:step]中的部分参数。
A[::]#下限、上限、默认步数
低于零的指数从数组的末端开始计算。
A = array([1,2,3,4,5])
A[-1]#最后⼀个元素
A[-3:]#最后三个元素
索引分区也适⽤于多维数组。
A = array([[n+m*10 for n in range(5)] for m in range(5)])
A
#⽅阵
A[1:4, 1:4]
#渐进,带有指定间隔数
A[::2, ::2]
5.3先进的索引⽅法
数组的值可以作为选择项⽬的索引。
row_indices = [1, 2, 3]
A[row_indices]
col_indices = [1, 2, -1]
A[row_indices, col_indices]
你也可以使⽤掩码:如果掩码类型为bool,那么根据掩码元素的值与相应的索引,选择该元素(True)或不选择(False)。
B = array([n for n in range(5)])
B
row_mask = array([True, False, True, False, False])
B[row_mask]
row_mask = array([1,0,1,0,0], dtype=bool)
B[row_mask]
这个函数对于根据某些条件从数组中选择元素⾮常有⽤。
x = arange(0, 10, 0.5)
x

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。