Tips:
1.ndarray是一個通用的同構數據多維容器,也就是說,其中的所有元素必須是相同類型的。每個數組都有一個shape(一個表示各維度大小的元組)和一個dtype(一個用于說明數組數據類型的對象):
In [17]: data.shape
Out[17]: (2, 3)
In [18]: data.dtype
Out[18]: dtype('float64')
In [19]: data1 = [6, 7.5, 8, 0, 1]
In [20]: arr1 = np.array(data1)
In [21]: arr1
Out[21]: array([ 6. , 7.5, 8. , 0. , 1. ])
2.調用astype總會創(chuàng)建一個新的數組(一個數據的備份),即使新的dtype與舊的dtype相同。
In [44]: numeric_strings = np.array(['1.25', '-9.6', '42'], dtype=np.string_)
In [45]: numeric_strings.astype(float)
Out[45]: array([ 1.25, -9.6 , 42. ])
3.傳播
In [60]: arr = np.arange(10)
In [61]: arr
Out[61]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [62]: arr[5]
Out[62]: 5
In [63]: arr[5:8]
Out[63]: array([5, 6, 7])
In [64]: arr[5:8] = 12
In [65]: arr
Out[65]: array([ 0, 1, 2, 3, 4, 12, 12, 12, 8, 9])
如上所示,當你將一個標量值賦值給一個切片時(如arr[5:8]=12),該值會自動傳播(也就說后面將會講到的“廣播”)到整個選區(qū)。跟列表最重要的區(qū)別在于,數組切片是原始數組的視圖。這意味著數據不會被復制,視圖上的任何修改都會直接反映到源數組上。
作為例子,先創(chuàng)建一個arr的切片:
In [66]: arr_slice = arr[5:8]
In [67]: arr_slice
Out[67]: array([12, 12, 12])
In [68]: arr_slice[1] = 12345
In [69]: arr
Out[69]: array([ 0, 1, 2, 3, 4, 12, 12345, 12, 8,
9])
如果你剛開始接觸NumPy,可能會對此感到驚訝(尤其是當你曾經用過其他熱衷于復制數組數據的編程語言)。由于NumPy的設計目的是處理大數據,所以你可以想象一下,假如NumPy堅持要將數據復制來復制去的話會產生何等的性能和內存問題。
4.Python關鍵字and和or在布爾型數組中無效。要使用&與|。