一.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])
其中你给一个切片赋值,他会自动传递个原数组。