一.numpy①
文章中所有的都是在ipython環境下
文章中的np是因爲import numpy as np
1.ndarray對象可以對數組的整塊數據執行數學運算。
data
array([[ 0.9321, -0.321 , -0.3432],
[ 0.5451, 0.2546, 0.9564]])
data*10
array([[ 9.321, -3.21 , -3.432],
[ 5.451, 2.546, 9.564]])
ndarray是一個同構數據的多維容器,其實就是裏面所有的元素都必須市同種類型。ndarray有兩個屬性shape(它是一個表示維度大小的元祖)、dtype(它是表示數據的類型的)
In [22]: arr3.shape
Out[22]: (2, 3)
In [23]: arr3.dtype
Out[23]: dtype('float64')
2.創建ndarray
使用array創建
import numpy
data1=[6,7.5,8,0,1]
arr1=np.array(data1)
arr1
array([6.,7.5,8.,0.,1.])
使用zeros創建
In [25]: np.zeros(10)
Out[25]: array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
In [26]: np.zeros((3,8))
Out[26]:
array([[0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0.]])
zeros創建的是一個指定長度和形狀的全爲0的數組。
使用ones創建
In [27]: np.ones(10)
Out[27]: array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
In [28]: np.ones((3,8))
Out[28]:
array([[1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1., 1., 1.]])
ones創建的是一個指定長度和形狀的全爲1的數組。
總結使用ones和zeros創建的方法相似。
使用empty創建
In [33]: np.empty((2,3,2))
Out[33]:
array([[[0., 0.],
[0., 0.],
[0., 0.]],
[[0., 0.],
[0., 0.],
[0., 0.]]])
創建方法和前面兩種相同,他是創建一個沒有具體值的數組。不過我試了幾次之都是“0.”,可能是我初學沒懂其中的意義。
可以結合python的函數arange創建
In [34]: np.arange(10)
Out[34]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
其中在沒有特別指出數據類型的情況下,創建的數據類型都是float(64)
In [35]: data5=np.array([1,2,3],dtype=np.float64)
In [36]: data6=np.array([1,2,3],dtype=np.int32)
In [37]: data5
Out[37]: array([1., 2., 3.])
In [38]: data6
Out[38]: array([1, 2, 3])
可以通過astype將數據類型轉換過來
In [39]: data5
Out[39]: array([1., 2., 3.])
In [40]: data7=data5.astype(np.float64)
In [41]: data7
Out[41]: array([1., 2., 3.])
ndarray可以切片
In [42]: np.arange(10)
Out[42]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [43]: data10=np.arange(10)
In [44]: data10[5]
Out[44]: 5
In [45]: data10[5:8]
Out[45]: array([5, 6, 7])
In [46]: data10[5:8]=12
In [47]: data10
Out[47]: array([ 0, 1, 2, 3, 4, 12, 12, 12, 8, 9])
In [48]: data11=data10[5:8]
In [49]: data11[1]=11111
In [50]: data10
Out[50]:
array([ 0, 1, 2, 3, 4, 12, 11111, 12, 8,
9])
In [51]: data11[:]=22222
In [52]: data10
Out[52]:
array([ 0, 1, 2, 3, 4, 22222, 22222, 22222, 8,
9])
其中你給一個切片賦值,他會自動傳遞個原數組。