Numpy的ndarray:
基本操作:
import numpy as np >>data=np.array([[ 0.9526, -0.246 , -0.8856], [ 0.5639, 0.2379, 0.9104]]) >>data*10 array([[ 9.5256, -2.4601, -8.8565], [ 5.6385, 2.3794, 9.104 ]]) >>data+data array([[ 1.9051, -0.492 , -1.7713], [ 1.1277, 0.4759, 1.8208]])
#返回各维度大小的元组
>>data.shape
(2,3)
#返回数组数据类型
>>data.dtype
dtype('float64')
#创建ndarray
>> data1=[6,7.5,8,0,1]
>> arr1=np.array(data1)
>>arr1
array([6.,7.5,8.,0.,1.])
#创建一个多维数组:
>>data2=[[1,2,3,4],[5,6,7,8]]
>>arr2=np.array(data2)
>>arr2
array([1,2,3,4],
[5,6,7,8])
>>arr2.ndim
2
>>arr2.shape
(2,4)
#利用zeros和ones分别创建指定长度或形状的全0或全1数组,empty可以创建一个没有任何具体值的数组
>>np.zeros(10)
array([0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.])
>>np.zeros((3, 6))
array([[ 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0.]])
>>np.empty((2,3,2))
array([[[ 4.94065646e-324, 4.94065646e-324],
[ 3.87491056e-297, 2.46845796e-130],
[ 4.94065646e-324, 4.94065646e-324]],
[[ 1.90723115e+083, 5.73293533e-053],
[ -2.33568637e+124, -6.70608105e-012],
[ 4.42786966e+160, 1.27100354e+025]]])
#arange是Python内置函数range的数组版:
>>np.arange(15)
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
ndarray的数据类型
#dtype(数据类型)是一个对象,它含有ndarray将一块内存解释为待定数据类型所需的信息
import numpy as np
>>arr1=np.array([1,2,3],dtype=np.float64)
>>arr1.dtype
dtype('float64')
>>arr2=np.array([1,2,3],dtype=np.int32)
>>arr2.dtype
dtype('int32')
#通过ndarray的astype方法显式地转换其dtype:
>>arr=np.array([1,2,3,4,5])
>>arr.dtype
dtype('int64')
>>float_arr=arr.astype(np.float64)
>>float_arr.dtype
dtype('float64')
>>numeric_strings=np.array(['1.25','-9.6','42'],dtype=np.string_)
>>numeric_strings.astype(float)
array([1.25,-9.6,42.])
数组和标量之间的运算:大小相等的数组之间的任何算术运算都会将运算应用到元素级,同样,数组与标量的算术运算也会将那个标量值传播到各个元素
基本的索引和切片:数组切片是原始数组的视图,这意味着数据不会被复制,视图上的任何修改都会直接反映到源数据上。
如果想要得到的是ndarray切片的一份副本而非视图,就需要显式地进行复制操作,例如arr[5:8].copy()
布尔型索引:
import numpy as np
>>names=np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
>>data=np.random.randn(7,4)
>>data[names=='Bob']
array([[-0.048 , 0.5433, -0.2349, 1.2792],
[ 2.1452, 0.8799, -0.0523, 0.0672]])
>>data[names=='Bob',2:]
array([[-0.2349, 1.2792],
[-0.0523, 0.0672]])
花式索引:将数据复制到新数组中
import numpy as np
>>arr=np.empty((8,4))
>>for i in range(8):
arr[i]=i
>>arr
array([[ 0., 0., 0., 0.],
[ 1., 1., 1., 1.],
[ 2., 2., 2., 2.],
[ 3., 3., 3., 3.],
[ 4., 4., 4., 4.],
[ 5., 5., 5., 5.],
[ 6., 6., 6., 6.],
[ 7., 7., 7., 7.]])
>>arr[[4,3,0,6]]
array([[ 4., 4., 4., 4.],
[ 3., 3., 3., 3.],
[ 0., 0., 0., 0.],
[ 6., 6., 6., 6.]])
>>arr=np.arange(32).reshape((8,4))
>>arr
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23],
[24, 25, 26, 27],
[28, 29, 30, 31]])
>>arr[[1, 5, 7, 2], [0, 3, 1, 2]]
array([ 4, 23, 29, 10])
>>arr[[1, 5, 7, 2]][:, [0, 3, 1, 2]]
array([[ 4, 7, 5, 6],
[20, 23, 21, 22],
[28, 31, 29, 30],
[ 8, 11, 9, 10]])
数组转置和轴对换:
import numpy as np
>> arr=np.arange(15).reshape((3,5))
>>arr
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
>>arr.T
array([[ 0, 5, 10],
[ 1, 6, 11],
[ 2, 7, 12],
[ 3, 8, 13],
[ 4, 9, 14]])
通用函数: 快速的元素级数组函数,是一种对ndarray中的数据执行元素级运算的函数
1. 一元ufunc表:
2. 二元ufunc表:
将条件逻辑表述为数组运算:np.where()
import numpy as np >>xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5]) >>yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5]) >>cond = np.array([True, False, True, True, False]) >>result = [(x if c else y) for x,y,c in zip(xarr,yarr,cond) ====== >>result = np.where(cond, xarr, yarr)
数学和统计方法:
用于布尔型数组的方法:
1.在数据运算中布尔值会被强制转换为1(True)和0(False)
2.sum():统计布尔型数组中的True的个数
3. Any():用于测试数组中是否存在一个或多个True
4.All() :用于检查数组中所有值是否都是True.
排序:
sort()方法:
import numpy as np >>arr=np.random.randn(8) >>arr array([ 0.6903, 0.4678, 0.0968, -0.1349, 0.9879, 0.0185, -1.3147, -0.5425]) >>arr.sort() array([-1.3147, -0.5425, -0.1349, 0.0185, 0.0968, 0.4678, 0.6903, 0.9879])
唯一化以及其他的集合逻辑:
用于数组的文件输入输出:
1.将数组以二进制格式保存到磁盘:
np.save()/np.savez() 和np.load()
2.存取文本文件:
np.loadtxt()
线性代数:
‘
随机数生成: