[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.])

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