功能(数值计算处理)
1.快速高效的多维数组对象ndarray。
2.用于对数组执行元素级计算以及直接对数组执行数学运算的函数。
3.用于读写硬盘上基于数组的数据集的工具。
4.线性代数运算、傅里叶变换,以及随机数生成。
数组和列表区别:https://www.cnblogs.com/xiamuzi/p/13637720.html
数组
np.array() ## 把列表转换成数组
a = [1,2,3,4,5]
a*2 ###列表重复
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
b= np.array(a)
b
array([1, 2, 3, 4, 5])
b * 2 ###变成数组后,每个元素*2(向量运算)
array([ 2, 4, 6, 8, 10])
函数
import numpy as np
np.arange(start,stop,step) ##创建等差数列
np.arange(1,10,2)
array([1, 3, 5, 7, 9])
###dim和shape
data = np.random.randn(4,3)
array([[ 1.9692876 , 2.21132149, 0.81525673],
[-1.48535693, 0.77007986, 1.24359518],
[ 0.12833722, 0.22804661, -2.00645359],
[-0.14299529, 0.6780291 , 0.54378908]])
data.ndim ###查看数据维度
2
data.shape
(4, 3) ### 几行几列
一维数组 :一行 n列
二维数组 : n行 n列
三维数组:n 块 n 行 n 列
最外面有几个 ] 中括号,有几个 ] 就是几维数组
数组的创建
np.array([1,2,3])##将列表转化为数组
arr = np.arange(10).reshape((5,2)) ###按行输入
array([[0, 1],
[2, 3],
[4, 5],
[6, 7],
[8, 9]])
np.zeros(10) ##10个0的一维数组
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
np.zeros((3,6)) ###3行6列的二维数组
array([[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.]])
np.zeros((4,3,6)) ### 3维 数组(有4块,每块3行6列)
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.],
[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.]],
[[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.]],
[[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.]]])
同理:np.ones()
QQ截图20201014192050.png
数据类型
data.dtype ##查看数据类型
arr = np.array([1, 2, 3, 4, 5])
arr.dtype
dtype('int64')
float_arr = arr.astype(np.float64) ##将整数型转换为浮点数型
float_arr.dtype
dtype('float64')
数组的运算
向量化运算,###大小相等的数组###之间的任何算术运算都会将运算应用到元素(与R语言类似)
数组的索引
1.与列表基本类似,支持索引和切片
2.跟列表最重要的区别在于,数组切片是原始数组的视图。这意味着数据不会被复制,视图上的任何修改都会直接反映到源数组上。
arr = np.arange(10)
arr[5:8] = 12
array([ 0, 1, 2, 3, 4, 12, 12, 12, 8, 9])
arr_slice = arr[5:8]
arr_slice
array([12, 12, 12])
arr_slice[1] = 12345
arr
array([ 0, 1, 2, 3, 4, 12, 12345,12, 8,9]) ###当我修稿arr_slice中的值,变动也会体现在原始数组arr中
如果想要复制,而不是视图
arr_slice = arr[5:8].copy()###就不会在原始数组修改了
arr[:] ###表示所有
###二维数组索引
arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr2d
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
arr2d[:2] ##索引前两行
array([[1, 2, 3],
[4, 5, 6]])
arr2d[:2, 1:] ### (行列用逗号隔开)
array([[2, 3],
[5, 6]])
arr2d[:, :1] ##
array([[1],
[4],
[7]])
3.布尔型索引
数组的比较运算也是向量化(矢量化)
通过布尔型索引选取数组中的数据,将总是创建数据的副本,即使返回一模一样的
数组也是如此。
注意:Python关键字and和or在布尔型数组中无效。要使用&与|。
names = np.array(['Bob','Joe','Will','Bob','Will','Joe','Joe'])
data = np.random.randn(7, 4)
array([[ 0.42680132, 0.94652979,0.17990623,-1.94095392],
[ 0.18580968, 1.51050193, -1.15013666, 0.21950726],
[ 1.42931947, 0.06567332, 2.37410023, 1.44799166],
[-0.20195853, 0.42809119, -1.10762637, 0.709266 ],
[-0.44486068, 0.52507019, 1.62858971, -0.00708257],
[-0.15423313, 0.02991515, -0.61163391, -2.02251203],
[ 0.06988871, -1.18707604, -1.49632953,-0.76557966]])
names != 'Bob'
array([False, True, True, False, True, True, True],dtype=bool)
data[~(names == 'Bob')] ### ‘~’ 操作符是反转条件
array([[ 0.18580968, 1.51050193,-1.15013666,0.21950726],
[ 1.42931947, 0.06567332, 2.37410023, 1.44799166],
[-0.44486068, 0.52507019, 1.62858971, -0.00708257],
[-0.15423313, 0.02991515, -0.61163391, -2.02251203],
[ 0.06988871, -1.18707604, -1.49632953,-0.76557966]])
data[data < 0] =0 ##将小于0的赋值0
array([[0.42680132, 0.94652979, 0.17990623, 0. ],
[0.18580968, 1.51050193, 0. , 0.21950726],
[1.42931947, 0.06567332, 2.37410023, 1.44799166],
[0. , 0.42809119, 0. , 0.709266 ],
[0. , 0.52507019, 1.62858971, 0. ],
[0. , 0.02991515, 0. , 0. ],
[0.06988871, 0. , 0. , 0. ]])
data[names != 'Joe'] = 7
####数组转置
arr.T ###行列转换