我听到的会忘记,我看到的能记住,我做过的才真正明白.
import numpy as np
ndarray
是Numpy最重要的一个特点,ndarray是一个通用的同构数据多维容器,也就是说其中的所有元素必须是相同类型的。
创建方法:使用array函数。可以接受一切序列型的对象。
In [4]: import numpy as np
In [5]: data=[123,435,7]
In [6]: arr=np.array(data)
In [7]: arr
Out[7]: array([123, 435, 7])
In [8]: arr.shape #查看arr 维度的大小
Out[8]: (3,)
In [4]: arr.dtype #说明数据类型
Out[4]: dtype('int32')
大小相等的数组之间的任何算术运算都会将运算应用到元素级【大小不同的数组之间的运算叫做广播】:
In [16]: arr
Out[16]:
array([[1., 2., 3.],
[4., 5., 6.]])
In [17]: arr*arr #乘法
Out[17]:
array([[ 1., 4., 9.],
[16., 25., 36.]])
In [18]: 1/arr #除法
Out[18]:
array([[1. , 0.5 , 0.33333333],
[0.25 , 0.2 , 0.16666667]])
In [19]: arr**0.05 #幂
Out[19]:
array([[1. , 1.03526492, 1.05646731],
[1.07177346, 1.08379839, 1.09372355]])
ndarray 的索引和切片
与列表最重要的区别在于,数组切片是 原始数据的视图,视图上的任何修改都会直接反映到源数组上:
In [27]: arr=np.arange(10)
In [28]: arr
Out[28]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [29]: arr_slice=arr[5:8]
In [30]: arr_slice[1]=3333
In [31]: arr
Out[31]: array([ 0, 1, 2, 3, 4, 5, 3333, 7, 8, 9])
In [32]: arr_slice[:]=888
In [33]: arr
Out[33]: array([ 0, 1, 2, 3, 4, 888, 888, 888, 8, 9])
#如果想得到ndarray切片的副本而不是视图,就需要显示的进行复制操作,如arr[6:8].copy()
布尔型索引
names=np.array(['bob','joe','will','bob','will','joe','joe'])
data=np.random.randn(7,4)
data[names=='bob'] #会返回data第0和第3行的数据
#通过布尔型索引选取数组中的数据,将总是创建数据的副本,另外python关键字and和or在布尔型数组中无效
为了以特定顺序选取行子集,只需要传入一个用于指定顺序的整数列表或者ndarray即可:
arr[[4,3,0,6]] # 表示特定顺序选取整个行
arr[:,[3,1,0,2]] #表示特定顺序选取整个列
只有冒号表示选取整个轴
这里可能有些疑惑了其实上面的选取行子集也可以表示为arr[[4,3,0,6],:] 只不过省略了后面的冒号 ,如果这样显示的写出来就可以和列表示发相互借鉴了
一次传入多个索引数组会返回一个一维数组,其中的元素对应各个索引元组
arr[[1,5,7,2],[0,3,1,2]]==arr[[1,0],[5,3],[7,1],[2,2]] 返回的是对应位置上元素组成的元组
选取特定的矩形区域:
方法一:arr[[1,5,7,2]][:,0,3,1,2]]
方法二:使用np.ix_函数,它可以将两个以为整数数组转换为一个用于选取方形区域的索引器:
arr[np.ix_([1,5,7,2],[0,3,1,2])]
##s数组转置和轴对换
arr.T 是arr的转置矩阵 计算矩阵内积时候 np.dot(arr.T,arr)
轴对换使用 swapaxes()接受一对轴编号 看不懂 待补充!!!!
#通用函数:快速的元素级数组函数
通用函数是对ndarray中的数据执行元素级别运算的函数
如 np.sqrt(arr) 数组的开方
np.exp() 各元素的自然指数
np.where(cond,x,y) = x if condition else y
arr=np.array([0,1,2],[3,4,5],[6,7,8])
arr.cumsum(0) #沿着0轴进行累加
array([0,1,2],
[3,5,7],
[9,12,15])
arr.sort(0) 接受按轴排序
np.unique(arr) ==sorted(set(arr))
用于找出唯一值并返回已经排序的结果
将数组以二进制格式保存在磁盘
np.save('some_array',arr) 若文件名没有扩展名. npy 系统会自动加上
np.savez('array_archive',a=arr,b=brr) 可以同时保存多组数据,读取时候使用关键字提取
np.load('some_array') 用于读取磁盘上的数据
求取矩阵乘法使用dot函数 x.dot(y) == np.dot(x,y)