Python 必备!Numpy 科学计算工具大揭秘,示例代码带你极速入门

Python 必备!Numpy 科学计算工具大揭秘,示例代码带你极速入门_第1张图片

Numpy快速入门


 目录

Numpy快速入门

1.Numpy1—初识numpy

2.Numpy2—ndarray的创建及属性 

3.Numpy3—N维数组的基本操作

4.Numpy4—N维数组的索引、切片和遍历

5.Numpy5—N维数组的重塑、组合和拆分

6.Numpy6—N维数组文件的读写操作

7.Numpy7—N维数组的拷贝、视图和广播


1.Numpy1—初识numpy

**示例:**

import numpy as np    #头文件import
import sys
import time

list1=[1,2,3,4,5,6]
print(list1)
#[1, 2, 3, 4, 5, 6]
list2=list(range(1,7))
print(list2)
#[1, 2, 3, 4, 5, 6]

arr1=np.array(list1)
print(arr1)
#[1 2 3 4 5 6]
arr2=np.arange(1,7)
print(arr2)
#[1 2 3 4 5 6]

#1.从空间占用情况的角度去分析两者的区别
lst=list(range(1000))    #开辟1000个数据的列表
print("Size of whole lst in bytes:",sys.getsizeof(lst[0])*len(lst))
#Size of whole lst in bytes: 28000
arr=np.arange(1000)    #开辟1000个数据的数组
print("Size of the whole arr in bytes:",arr.itemsize*arr.size)
#Size of the whole arr in bytes: 8000
#从上述程序运行结果可知使用arr可大大节省空间,提高程序的执行效率

#2.从时间消耗情况的角度去分析两者的区别
size=1000000
#开辟1000000个数据量的两个列表,对这两个列表进行简单操作,计算运行时间差
list1=list(range(1,size+1))
list2=list(range(1,size+1))
begin_time_list=time.time()
for x,y in zip(list1,list2):
    res=x*y
end_time_list=time.time()
print("Time of whole list in runing:",end_time_list-begin_time_list)
#Time of whole list in runing: 0.13188576698303223
#开辟1000000个数据量的两个数组,对这两个数组进行简单操作,计算运行时间差
arr1=np.arange(1,size+1)
arr2=np.arange(1,size+1)
begin_time_arr=time.time()
res=arr1*arr2
end_time_arr=time.time()
print("Time of whole arr in runing:",end_time_arr-begin_time_arr)
#Time of whole arr in runing: 0.011688947677612305
#从上述程序运行结果可知使用arr可大大节省时间,提高执行效率

2.Numpy2—ndarray的创建及属性 

**示例:**

import numpy as np

#1.创建一维数组
a=np.array([1,2,3,4,5,6])
print(a)
#[1 2 3 4 5 6]
print(type(a))  #a的类型
#
print(a.dtype)  #a中数据的类型
#int64
print(a.ndim)   #a的维数
#1
print(a.size)   #a中数据的个数
#6
print(a.shape)  #a的形状
#(6,)
print(a.itemsize)   #a中每个数据元素的大小byte
#8

#2.创建二维数组
b=np.array([[1.1,2.2,3.3,4.4,5.5],[6.6,7.7,8.8,9.9,10.10]])
print(b)
#[[ 1.1  2.2  3.3  4.4  5.5]
# [ 6.6  7.7  8.8  9.9 10.1]]
print(type(b))
#
print(b.dtype)
#float64
print(b.ndim)    
#2    #二维
print(b.size)
#10    
print(b.shape)
#(2, 5)    #二行五列
print(b.itemsize)
#8

c=np.zeros((3,3))
print(c)
#[[0. 0. 0.]
# [0. 0. 0.]
# [0. 0. 0.]]
c=np.ones((3,3))
print(c)
#[[1. 1. 1.]
# [1. 1. 1.]
# [1. 1. 1.]]
c=np.arange(1,10,2)
print(c)
#[1 3 5 7 9]
c=np.linspace(0,10,5)
print(c)
#[ 0.   2.5  5.   7.5 10. ]
c=np.arange(1,13).reshape(3,4)
print(c)
#[[ 1  2  3  4]
# [ 5  6  7  8]
# [ 9 10 11 12]]
c=np.random.random(3)
print(c)
#[0.2494594  0.0283928  0.25636998]
c=np.random.random((3,3))
print(c)
#[[0.81826422 0.15440085 0.66893059]
# [0.36643557 0.5403894  0.61964778]
# [0.42447791 0.98975435 0.93585648]]

3.Numpy3—N维数组的基本操作

**示例:**

import numpy as np

#1.一维数组的操作
a=np.array([1,2,3,4,5,6])
print(a)
#[1 2 3 4 5 6]
print(a+3)
#[4 5 6 7 8 9]
print(a*3)
#[ 3  6  9 12 15 18]
b=np.arange(7,13)
print(b)
#[ 7  8  9 10 11 12]
print(a+b)
#[ 8 10 12 14 16 18]
print(a-b)
#[-6 -6 -6 -6 -6 -6]
print(a*b)
#[ 7 16 27 40 55 72]

#2.二维数组的操作
c=np.arange(1,17).reshape(4,4)
print(c)
# [[ 1  2  3  4]
#  [ 5  6  7  8]
#  [ 9 10 11 12]
#  [13 14 15 16]]
d=np.ones((4,4))
print(d)
# [[1. 1. 1. 1.]
#  [1. 1. 1. 1.]
#  [1. 1. 1. 1.]
#  [1. 1. 1. 1.]]
print(c+d)    #对应位直接相加
# [[ 2.  3.  4.  5.]
#  [ 6.  7.  8.  9.]
#  [10. 11. 12. 13.]
#  [14. 15. 16. 17.]]
print(c-d)    #对应位直接相减
# [[ 0.  1.  2.  3.]
#  [ 4.  5.  6.  7.]
#  [ 8.  9. 10. 11.]
#  [12. 13. 14. 15.]]
print(c*d)    #对应位直接相乘
# [[ 1.  2.  3.  4.]
#  [ 5.  6.  7.  8.]
#  [ 9. 10. 11. 12.]
#  [13. 14. 15. 16.]]
#矩阵相乘
print(c.dot(d))
# [[10. 10. 10. 10.]
#  [26. 26. 26. 26.]
#  [42. 42. 42. 42.]
#  [58. 58. 58. 58.]]
print(d.dot(c))
# [[28. 32. 36. 40.]
#  [28. 32. 36. 40.]
#  [28. 32. 36. 40.]
#  [28. 32. 36. 40.]]

#3.一维数组的常用函数操作
e=np.array([1,2,3,4,5])
print(e)
#[1 2 3 4 5]
e+=3
print(e)
#[4 5 6 7 8]
e*=2
print(e)
#[ 8 10 12 14 16]
print(np.sqrt(e))
#[2.82842712 3.16227766 3.46410162 3.74165739 4.        ]
print(np.log(e))
#[2.07944154 2.30258509 2.48490665 2.63905733 2.77258872]
print(np.sin(e))
#[ 0.98935825 -0.54402111 -0.53657292  0.99060736 -0.28790332]
print(np.cos(e))
#[-0.14550003 -0.83907153  0.84385396  0.13673722 -0.95765948]
#最大值
print(e.max())
#16
#最小值
print(e.min())
#8
#求和
print(e.sum())
#60
#平均值
print(e.mean())
#12.0
#方差
print(e.std())
#2.8284271247461903
#累计和
print(e.cumsum())
#[ 8 18 30 44 60]
#累计乘
print(e.cumprod())
#[     8     80    960  13440 215040]

#上述操作二维数组同样适用
f=np.arange(1,13).reshape((3,4))
print(f)
# [[ 1  2  3  4]
#  [ 5  6  7  8]
#  [ 9 10 11 12]]
#axis=0 以列为情况下,对每一列进行求和
print(f.sum(axis=0))
#[15 18 21 24]
#axis=1 以行为情况下,对每一列进行求和
print(f.sum(axis=1))
#[10 26 42]
#axis=0 以列为情况下,对每一列进行求最大值
print(f.max(axis=0))
#[ 9 10 11 12]
#axis=0 以列为情况下,对每一列进行求最小值
print(f.min(axis=0))
#[1 2 3 4]
#axis=1 以行为情况下,对每一列进行求最大值
print(f.max(axis=1))
#[ 4  8 12]
#axis=1 以行为情况下,对每一列进行求最小值
print(f.min(axis=1))
#[1 5 9]

4.Numpy4—N维数组的索引、切片和遍历

**示例:**

import numpy as np

#1.数组的索引访问
#一维数组
a=np.arange(1,11)
print(a)
#[ 1  2  3  4  5  6  7  8  9 10]
print(a[0])
#1
print(a[-1])
#10
print(a[[1,2,3]])
#[2 3 4]
#二维数组
b=np.arange(1,13).reshape((3,4))
print(b)
# [[ 1  2  3  4]
#  [ 5  6  7  8]
#  [ 9 10 11 12]]
print(b[1,2])   #一行二列
#7
print(b[[1,2],1])      #一二行的一列
#[ 6 10]
print(b[2,[1,2]])   #二行的一二列
#[10 11]

c=np.random.random((4,4))
print(c)
# [[0.7652821  0.88798367 0.35855935 0.30504034]
#  [0.79376416 0.93237495 0.72822685 0.70820658]
#  [0.68227057 0.24924376 0.25320947 0.64075459]
#  [0.38994014 0.54414068 0.25289331 0.90704502]]
print(c>0.5)
# [[ True False  True False]
#  [False False  True False]
#  [False False False  True]
#  [ True False  True False]]
print(c[c<0.5])
#[0.48988711 0.47345124 0.18829294 0.46568255 0.37038209 0.33017972 0.46242777 0.46000516 0.3458152 ]
d=np.array(["Bob","Joe","Will","Bob"])
print(d)
#['Bob' 'Joe' 'Will' 'Bob']
print(d=="Bob")
#[ True False False  True]

#2.数组切片
#一维数组切片
e=np.arange(1,11)
print(e)
#[ 1  2  3  4  5  6  7  8  9 10]
print(e[:])
#[ 1  2  3  4  5  6  7  8  9 10]
print(e[0:5])
#[1 2 3 4 5]
print(e[3:])
#[ 4  5  6  7  8  9 10]
print(e[:6])
#[1 2 3 4 5 6]
print(e[::2])
#[1 3 5 7 9]
#二维数组切片
f=np.arange(1,13).reshape((3,4))
print(f)
# [[ 1  2  3  4]
#  [ 5  6  7  8]
#  [ 9 10 11 12]]
print(f[:])
# [[ 1  2  3  4]
#  [ 5  6  7  8]
#  [ 9 10 11 12]]
print(f[0,:])
#[1 2 3 4]
print(f[:,0])
#[1 5 9]
print(f[0:2,0:2])
# [[1 2]
#  [5 6]]
print(f[[0,1],:])
# [[1 2 3 4]
#  [5 6 7 8]]
print(f[::-1])
# [[ 9 10 11 12]
#  [ 5  6  7  8]
#  [ 1  2  3  4]]

#3.数组的遍历
#一维数组的遍历
e=np.arange(1,11)
for elem in e:
    print(elem)
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
# 10
#二维数组的遍历
f=np.arange(1,13).reshape((3,4))
for elem in f:
    print(elem)
# [1 2 3 4]
# [5 6 7 8]
# [ 9 10 11 12]
for row in f:
    for elem in row:
        print(elem)
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
# 10
# 11
# 12
for elem in f.flatten():
    print(elem)
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
# 10
# 11
# 12
#按行遍历
for elem in np.nditer(f,order='C'):
    print(elem)
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
# 10
# 11
# 12
#按列遍历
for elem in np.nditer(f,order='F'):
    print(elem)
# 1
# 5
# 9
# 2
# 6
# 10
# 3
# 7
# 11
# 4
# 8
# 12

5.Numpy5—N维数组的重塑、组合和拆分

**示例:**

import numpy as np

#1.数组重塑
a=np.random.random(12)
print(a)
# [0.11855642 0.79898885 0.88494184 0.47131648 0.86038666 0.45124748
#  0.10681595 0.95553625 0.65758083 0.76891403 0.94431119 0.6126795 ]
b=a.reshape(3,4)
print(b)
# [[0.29439463 0.57480694 0.59189414 0.40823794]
#  [0.06170059 0.38416715 0.23274314 0.94530341]
#  [0.75907254 0.591165   0.11474947 0.4104612 ]]
#将一维塑造为二维
a.shape=(3,4)
print(a)
# [[0.33683677 0.71233694 0.07798552 0.33314699]
#  [0.16873978 0.93691109 0.34982016 0.05799286]
#  [0.43391711 0.80155599 0.06651639 0.90309592]]
#将二维重塑为一维
a=a.ravel()
print(a)
# [0.3462454  0.68559892 0.69709721 0.22664318 0.52200892 0.30429834
#  0.77417022 0.0290302  0.75174221 0.22152962 0.33669016 0.77610894]

#2.数组组合
#一维数组的组合
c=np.array([1,2,3])
d=np.array([4,5,6])
e=np.array([7,8,9])
print(np.row_stack((c,d,e)))  #按行组
# [[1 2 3]
#  [4 5 6]
#  [7 8 9]]
print(np.column_stack((c,d,e)))  #按列组
# [[1 4 7]
#  [2 5 8]
#  [3 6 9]]
#二维数组的组合
f=np.ones((3,3))
print(c)
# [[1. 1. 1.]
#  [1. 1. 1.]
#  [1. 1. 1.]]
g=np.zeros((3,3))
print(d)
# [[0. 0. 0.]
#  [0. 0. 0.]
#  [0. 0. 0.]]
#竖直方向上组合
print(np.vstack((f,g)))
# [[1. 1. 1.]
#  [1. 1. 1.]
#  [1. 1. 1.]
#  [0. 0. 0.]
#  [0. 0. 0.]
#  [0. 0. 0.]]
#水平方向上组合
print(np.hstack((f,g)))
# [[1. 1. 1. 0. 0. 0.]
#  [1. 1. 1. 0. 0. 0.]
#  [1. 1. 1. 0. 0. 0.]]

#3.数组拆分
#二维数组的拆分
h=np.arange(1,17).reshape((4,4))
print(h)
# [[ 1  2  3  4]
#  [ 5  6  7  8]
#  [ 9 10 11 12]
#  [13 14 15 16]]
[i,j]=np.hsplit(h,2)   #按列拆分
print(i)
print(j)
# [[ 1  2]
#  [ 5  6]
#  [ 9 10]
#  [13 14]]
# [[ 3  4]
#  [ 7  8]
#  [11 12]
#  [15 16]]
[i,j]=np.vsplit(h,2)  #按行拆分
print(i)
print(j)
# [[1 2 3 4]
#  [5 6 7 8]]
# [[ 9 10 11 12]
#  [13 14 15 16]]
h=np.arange(1,10).reshape((3,3))
print(h)
# [[1 2 3]
#  [4 5 6]
#  [7 8 9]]
[i,j,k]=np.split(h,[1,2],axis=1)
print(i)
print(j)
print(k)
# [[1]
#  [4]
#  [7]]
# [[2]
#  [5]
#  [8]]
# [[3]
#  [6]
#  [9]]
[i,j,k]=np.split(h,[1,2],axis=0)
print(i)
print(j)
print(k)
# [[1 2 3]]
# [[4 5 6]]
# [[7 8 9]]

6.Numpy6—N维数组文件的读写操作

**示例:**

import numpy as np

data=np.random.random((10,10))
print(data)
# [[0.51767737 0.9041094  0.27814156 0.20228045 0.46419682 0.12009573
#   0.3523557  0.43847826 0.27490064 0.19010329]
#  [0.72819474 0.5098671  0.35998113 0.08175187 0.17425693 0.35285571
#   0.98248456 0.700138   0.34750804 0.10647466]
#  [0.52652885 0.01934305 0.9744665  0.32831883 0.59057573 0.10826479
#   0.56867185 0.9816562  0.13331756 0.58223546]
#  [0.64754067 0.12767289 0.33251657 0.77832859 0.77020283 0.38612918
#   0.00579017 0.31194788 0.37431093 0.55061209]
#  [0.13524209 0.09235717 0.12258979 0.45538705 0.40727246 0.40093301
#   0.24875382 0.04293137 0.44048708 0.66347998]
#  [0.36752545 0.60444881 0.5744973  0.69138343 0.62866278 0.40440741
#   0.96722064 0.61642509 0.67866254 0.20021456]
#  [0.85197041 0.80524769 0.24376974 0.45164404 0.74057285 0.00423245
#   0.58063022 0.28903659 0.36146585 0.3425735 ]
#  [0.60193721 0.19901995 0.09747812 0.70868093 0.21124862 0.25546887
#   0.78098653 0.59709377 0.78802936 0.12220698]
#  [0.01965299 0.51109099 0.81951483 0.63219368 0.687342   0.95275667
#   0.326221   0.50885931 0.17902395 0.04742981]
#  [0.63278495 0.39493481 0.58646056 0.15607075 0.4896752  0.55731619
#   0.67087666 0.70827756 0.58057534 0.46675884]]
np.save("file/saved_data",data)
# file/saved_data.npy
loaded_data=np.load("file/saved_data.npy")
print(loaded_data)
# [[0.980092   0.61535828 0.89351287 0.78061616 0.14792789 0.53279062
#   0.72832111 0.43541449 0.65157291 0.20449631]
#  [0.97122185 0.43282582 0.6203299  0.85950978 0.65051802 0.62703801
#   0.80664991 0.9482879  0.15335226 0.95578078]
#  [0.05813995 0.08072609 0.96165295 0.5926959  0.89576808 0.15496328
#   0.24564258 0.28539536 0.96995533 0.60150954]
#  [0.72376535 0.71658725 0.93229285 0.25849045 0.75741181 0.07836196
#   0.16424541 0.04711346 0.74423307 0.88850122]
#  [0.89655246 0.13181572 0.15115155 0.11329616 0.11584779 0.64719578
#   0.4471081  0.24730082 0.55829395 0.98412441]
#  [0.05643149 0.98869265 0.09349872 0.6940293  0.81945909 0.56571459
#   0.9322309  0.34339946 0.07938659 0.4435857 ]
#  [0.51750864 0.77808332 0.24762895 0.92284282 0.52206281 0.54192372
#   0.85049267 0.79717996 0.32540383 0.25642775]
#  [0.07121905 0.20540087 0.70585023 0.54511504 0.70927159 0.91349146
#   0.6365359  0.90775278 0.7385943  0.63898907]
#  [0.85938484 0.99455335 0.48130027 0.7306874  0.53004293 0.89477397
#   0.78006213 0.19559793 0.68338056 0.25775954]
#  [0.14482329 0.90191178 0.54553372 0.8010394  0.86768276 0.40289041
#   0.26432431 0.15907779 0.19896298 0.47616647]]

7.Numpy7—N维数组的拷贝、视图和广播

**示例:**

import numpy as np

#浅拷贝
a=np.arange(1,13)
print(a)
#[ 1  2  3  4  5  6  7  8  9 10 11 12]
b=a
print(b)
#[ 1  2  3  4  5  6  7  8  9 10 11 12]
a[4]=-1
print(b)
#[ 1  2  3  4 -1  6  7  8  9 10 11 12]

#深拷贝
a=np.arange(1,13)
print(a)
#[ 1  2  3  4  5  6  7  8  9 10 11 12]
c=a.copy()
print(c)
#[ 1  2  3  4  5  6  7  8  9 10 11 12]
a[4]=-1
print(c)
#[ 1  2  3  4  5  6  7  8  9 10 11 12]

#广播
a=np.arange(16).reshape((4,4))
print(a)
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]
#  [12 13 14 15]]
d=np.arange(4)
print(d)
#[0 1 2 3]
print(a+d)
# [[ 0  2  4  6]
#  [ 4  6  8 10]
#  [ 8 10 12 14]
#  [12 14 16 18]]

你可能感兴趣的:(Python系列,numpy,python,开发语言,人工智能,笔记)