PYTHON-numpy.array的大坑 、numpy中的數據類型


1.大坑介紹:

  一定要在生成數組(array)時候聲明數組所存儲變量的變量類型;不然,真的,這個錯誤幾天都找不出來!太隱蔽了!

官網已經給你悄悄暗示了些什么:

 

 

   總的來說就是自己基礎知識不扎實導致的,忽視了一點就是:

python中的list是python的內置數據類型,list中的數據類不必相同的,而array的中的類型必須全部相同。在list中的數據類型保存的是數據的存放的地址,簡單的說就是指針,並非數據,這樣保存一個list就太麻煩了,例如list1=[1,2,3,'a']需要4個指針和四個數據,增加了存儲和消耗cpu。

 

2.大坑代碼:

>>> a = [0,3,2]
>>> b = [0,8,2]
>>> c = np.array(list(zip(a,b)))
>>> c = np.mean([[0,0],[1,1]])
>>> c
0.5
>>> c = np.mean([[0,0],[1,1]],axis = 0)
>>> c
array([0.5, 0.5])
#看到這的小伙伴,沒問題啊?怎么回事,小老弟!

#下面可要看仔細了
>>> c = np.array(list(zip(a,b))) >>> c[0] = np.mean([[0,0],[1,1]],axis = 0)
>>> c[0]
array([0, 0])

#咋回事呢?求個列方向的平均值怎么成0了,不應該是array[0.5,0.5]么

問題就在這,我之前在“灰色行”給c賦予了一個數組的屬性,其開始存儲的是

array([[0, 0],
[3, 8],
[2, 2]])

這樣一個數據,由於其中元素都是int的,所以系統就認為你要的這個數組就是int的,但是最后呢?你要其存儲float類型的,作為系統的“好心”,肯定給你轉換為int。卻恰恰是這個“好心”導致程序出錯。

 

方法:加入數據類型

>>> c = np.array(list(zip(a,b)),dtype = np.float32)
>>> c[0] = np.mean([[0,0],[1,1]],axis = 0)
>>> c[0]
array([0.5, 0.5], dtype=float32)#這樣就對了嘛!

 

3.numpy中的數據類型:

數據類型
描述
bool_
布爾(True或False),存儲為一個字節
int_
默認整數類型(與Clong相同;通常是int64或int32)
INTC
與Cint(通常為int32或int64)相同
INTP
用於索引的整數(與Cssize_t相同;通常是int32或int64)
INT8
字節(-128至127)
INT16
整數(-32768至32767)
INT32
整數(-2147483648至2147483647)
Int64的
整數(-9223372036854775808至9223372036854775807)
UINT8
無符號整數(0到255)
UINT16
無符號整數(0到65535)
UINT32
無符號整數(0到4294967295)
UINT64
無符號整數(0到18446744073709551615)
float_
float64的簡寫。
float16
半精度浮點:符號位,5位指數,10位尾數
FLOAT32
單精度浮點數:符號位,8位指數,23位尾數
float64
雙精度浮點:符號位,11位指數,52位尾數
complex_
complex128的簡寫。
complex64
復數,由兩個32位浮點數(實部和虛部)
complex128
復數,由兩個64位浮點數(實部和虛部)

 

 

4.參考:

https://www.numpy.org.cn/(官網鏈接)

https://www.cnblogs.com/hackpig/p/8183470.html(list與array的區別)

https://www.cnblogs.com/chenhuabin/p/11412818.html(numpy中的數據類型)  <-------------------------強烈推薦學矩陣的小伙伴們看看

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM