[numpy]构建ndarray: array,asarray,fromfile,loadtxt,fromiter

本期介绍的函数:

从列表生成ndarray

1. 基本操作:

list=[[1,2,3],[4,5,6]]
a=np.array(list)
# output
# array([[1, 2, 3],
#       [4, 5, 6]])

2. 指定维度

例如我们想生成维度为2的ndarray

list=[1,2,3]
a=np.array(list)
# 结果为
# array([1, 2, 3])
list=[1,2,3]
a=np.array(list,ndmin=2)
# 结果为
# array([[1, 2, 3]])
# a.shape=(1,3)

3. 指定数据类型

list=[1,2,3]
a=np.array(list,dtype=complex)
# 结果
# array([1.+0.j, 2.+0.j, 3.+0.j])

array和asarray的区别

简言之,如果转换的是列表,改变列表的值后,ndarray都不改变

list=[1,2,3]
a=np.array(list)
b=np.asarray(list)
print('a=',a,'\nb=',b)
list[1]=888
print('a=',a,'\nb=',b)

结果
a= [1 2 3]
b= [1 2 3]
a= [1 2 3]
b= [1 2 3]
而如果是ndarray,则array不变,asarray改变

list=np.array([1,2,3])
a=np.array(list)
b=np.asarray(list)
print('a=',a,'\nb=',b)
list[1]=888
print('a=',a,'\nb=',b)

结果
a= [1 2 3]
b= [1 2 3]
a= [1 2 3]
b= [ 1 888 3]
这里类似于如下的道理
numpy中的copy

fromfile和loadtxt

详细可参见
NumPy 文件存取 tofile,fromfile, load,save

1. fromfile的用法

把a存入二进制文件

list=np.array([1,2,3])
a=np.array(list)
a.tofile('a.bin')
b=np.fromfile('a.bin',dtype=a.dtype)# dtype是a的数据类型

Out[26]: array([1, 2, 3])

2. loadtxt的用法

在这里插入图片描述

常用参数解释

usecols :which columns to read
delimiter: 数之间的分隔符,默认是空格 whithspace
unpack: 读取的矩阵是否做转置,True是做转置

a=np.loadtxt('a.txt')

array([[1., 2., 3.],
[4., 5., 6.],
[7., 8., 9.]])

而如果读取1,3两列:

a=np.loadtxt('a.txt',usecols=(0,2))

array([[1., 3.],
[4., 6.],
[7., 9.]])

如果文件里的分割符改为’,’
在这里插入图片描述

a=np.loadtxt('a.txt',delimiter=',')

array([[1., 2., 3.],
[4., 5., 6.],
[7., 8., 9.]])

fromiter

creat a new 1D array from an iterable object

iterable=(x*x for x in range(10))# 注意这不是tuple
a=np.fromiter(iterable,dtype=float)

array([ 0., 1., 4., 9., 16., 25., 36., 49., 64., 81.])

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章