numpy 基础 这一篇就够了

我听到的会忘记,我看到的能记住,我做过的才真正明白.

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关键字andor在布尔型数组中无效


为了以特定顺序选取行子集,只需要传入一个用于指定顺序的整数列表或者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)

猜你喜欢

转载自blog.csdn.net/weixin_38656890/article/details/80060397