numpy基本概念:

一个很方便的进行矩阵数组相关操作的库

一个数组所包含的信息是非常多的,我们也可以用这样的多的内容进行计算

import numpy as np

a_list= [1,2,2,3]

a_nparry=np.array(a_list)

a_nparry[-2:]

#矩阵格式

a_array=np.array([
    [1,2,3],
    [2,3,4],
    [3,4,5]
])

d=a_array.shape
e=a_nparry.size
f=a_array.ndim

g=a_array[1,2]#索引
a_array[1,2]=2#赋值
h=a_array[1]
j=a_array[:,1]#第二列
j=a_array[0,0:2]#第0行0到2
pass

a_array
array([[1, 2, 3],
       [2, 3, 2],
       [3, 4, 5]])
a_array2=a_array
a_array2[1,2]=1000
a_array2
array([[   1,    2,    3],
       [   2,    3, 1000],
       [   3,    4,    5]])
a_array
array([[   1,    2,    3],
       [   2,    3, 1000],
       [   3,    4,    5]])
a_array2=a_array.copy()
a_array2[1,1]=10000
a_array
array([[   1,    2,    3],
       [   2,    3, 1000],
       [   3,    4,    5]])

a_array2
array([[    1,     2,     3],
       [    2, 10000, 10000],
       [    3,     4,     5]])
a_arr=np.arange(0,100,10)
a_arr
array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])
mask=np.array([0,1,0,0,1,1,0,1,1,0],dtype=bool)
mask
array([False,  True, False, False,  True,  True, False,  True,  True,
       False])
a_arr[mask]#记住这个是中括号
array([10, 40, 50, 70, 80])
random_array=np.random.rand(10)
random_array
array([0.33437899, 0.8534622 , 0.52060191, 0.1407311 , 0.03577722,
       0.14826917, 0.11554851, 0.03838209, 0.11986814, 0.53189967])
mask=random_array > 0.5
mask
array([False,  True,  True, False, False, False, False, False, False,
        True])
a_arr[mask] # 这样就可以选出我想要符合条件的值
array([10, 20, 90])
b_arr=np.array([10,20,30,60,70,90])
b_arr>50
array([False, False, False,  True,  True,  True])
np.where(b_arr>50)
(array([3, 4, 5], dtype=int64),)
a_arr[np.where(b_arr>50)]
array([30, 40, 50])
xi_arr=np.array([1,2,2,45,4],dtype=np.float32)
xi_arr
array([ 1.,  2.,  2., 45.,  4.], dtype=float32)
xi_arr.dtype
dtype('float32')
xi_arr.nbytes
20
bo=np.array([1,3,4,4,5,56])
np.asanyarray(bo,dtype=np.float32)
array([ 1.,  3.,  4.,  4.,  5., 56.], dtype=float32)
bo
array([ 1,  3,  4,  4,  5, 56])
bo1=np.asanyarray(bo,dtype=np.float32)
bo1
array([ 1.,  3.,  4.,  4.,  5., 56.], dtype=float32)
bo.astype(np.float32)
array([ 1.,  3.,  4.,  4.,  5., 56.], dtype=float32)

数值计算

import numpy as np
arr=np.array([[1,2,3],[4,5,6]])
arr
array([[1, 2, 3],
       [4, 5, 6]])
np.sum(arr)
21
#上面这个是把数组里面的所有值都相加了

指定维度(轴)累加

np.sum(arr,axis=0)#沿着竖着的轴相加
array([5, 7, 9])
np.sum(arr,axis=1)#沿着横向的轴相加
array([ 6, 15])
np.ndim(arr)
2
np.sum(arr,axis=-1)#因为有两维度所以最后一个维度也是1的维度(x轴)
array([ 6, 15])
arr.sum(axis=0)
array([5, 7, 9])

arr.sum(axis=1)
array([ 6, 15])
arr.prod()# 累乘乘积
720
arr.prod(axis=1)
array([  6, 120])
arr.min(axis=1)
array([1, 4])
arr.max(axis=0)
array([4, 5, 6])

寻找索引索引位置

arr.argmax()#寻找最大的值的位置
5
arr.argmax(axis=1)#寻找最大的值的位置
array([2, 2], dtype=int64)

计算均值

arr.mean()
3.5

计算标准差

arr.std()
1.707825127659933
arr.std(axis=1)
array([0.81649658, 0.81649658])

计算方差

arr.var()
2.9166666666666665

做限制

arr.clip(2,4)
array([[2, 2, 3],
       [4, 4, 4]])
# 大于的都会小于4,

近似

hhh=np.array([1.21212,12.2112312312,666,367])
hhh.round()
array([  1.,  12., 666., 367.])
hhh.round(decimals=1)
array([  1.2,  12.2, 666. , 367. ])

四则运算

文件读写

import numpy as np
%%writefile a.txt
1 2 3 4 5 6 7
8 9 10 11 12 13 14
Overwriting a.txt
data1=[]
with open('a.txt') as f:
    for line in f:
        worked=line.split()
        print(worked)
        data1=[float(x) for x in worked]### 把数组里的所有成员都转换为数字
        
data=np.array(data1)
print(data)
['1', '2', '3', '4', '5', '6', '7']
['8', '9', '10', '11', '12', '13', '14']
[ 8.  9. 10. 11. 12. 13. 14.]
data=np.loadtxt('a.txt',delimiter=' ')
data
array([[ 1.,  2.,  3.,  4.,  5.,  6.,  7.],
       [ 8.,  9., 10., 11., 12., 13., 14.]])
data=np.loadtxt('a.txt',delimiter=' ',skiprows=1)
data
array([ 8.,  9., 10., 11., 12., 13., 14.])
#去掉了第一行
  • skiprows:去掉几行
  • delimiter:分割符“,”
  • usecols:[0,1,5]:指定用那几列