人工智能系列-numpy(三)

羽晨同学 2024-07-10 11:31:01 阅读 84

🌈个人主页:羽晨同学 

💫个人格言:“成为自己未来的主人~”   

副本和视图

副本

副本是一个数据的完整的拷贝,如果我们对副本进行修改,它不会影响到原始数据,物理内存不再同一位置。副本一般发生在Python序列的切片操作,调用deepCopy()函数。调用ndarray的copy()函数产生一个副本。

视图

视图是数据的一个别称或者引用,通过该别称或引用亦便可访问,操作原有数据,但原有数据不会产生拷贝,如果我们对视图进行修改,它会影响到原始数据,物理内存在同一位置。

视图一般发生在numpy的切片操作返回原数据的视图,调用ndarray的view()函数产生一个视图。

赋值

简单的赋值不会创建数组对象的副本。相反,它使用原始数组的相同id()来访问它,id()返回Python对象的通用标识符,类似于C中的指针。

此外,一个数组的任何变化都反映在另一个数组上。例如:一个数组的形状改变也会改变另一个数组的形状。

<code>import numpy as np

a=np.arange(6)

print('我们的数组是:')

print(a)

print('调用id()函数:')

print(id(a))

print('a复制给b')

b=a

print(b)

print('b具有的id()')

print(id(b))

print('修改b的形状')

b.shape=3,2

print(b)

print('a的形状也改变了')

print(a)

视图或浅拷贝

ndarray.view()方会创建一个新的数组对象,该方法创建的新数组的维数变化不会改变原始数据的维数

<code>import numpy as np

a=np.arange(6).reshape(2,3)

print('数组a: ')

print(a)

print('创建a的视图: ')

b=a.view()

print(b)

print('两个数组的id()不相同:')

print('a的id()')

print(id(a))

print('b的id()')

print(id(b))

b.shape=3,2

print('b的形状:')

print(b)

print('a的形状:')

print(a)

而使用切片创建视图修改数据会影响到原始数组:

<code>import numpy as np

arr=np.arange(12)

print('我们的数组: ')

print(arr)

print('创建切片:')

a=arr[3:]

b=arr[3:]

a[1]=123

b[2]=234

print(arr)

print(id(a))

print(id(b))

print(id(arr))

 副本或深拷贝

ndarray.copy()函数创建一个副本,对副本数据进行修改,不会影响到原始数据,它们物理内存不在同一位置。

<code>import numpy as np

a=np.array([[10,10],[2,3],[4,5]])

print('数组 a')

print(a)

print('创建a的深层副本:')

b=a.copy()

print('数组b')

print(b)

print('我们能够写入b来写入a吗?')

print(b is a)

print('修改b的内容:')

b[0,0]=100

print('修改后的数组b:')

print(b)

print('a保持不变:')

print(a)

 

NumPy Matplotlib

Matplotlib是Python的绘图库,它可与NumPy一起使用,提供了一种有效的MatLab开源替代方案。

举一个画一元线性方程的简单例子:

<code>import numpy as np

from matplotlib import pyplot as plt

x=np.arange(1,11)

y=2*x+5

plt.title("Matplotlib demo")

plt.xlabel("x axis caption")

plt.ylabel("y axis caption")

plt.plot(x,y)

plt.show()

<code>import numpy as np

from matplotlib import pyplot as plt

x=np.arange(1,11)

y=2*x+5

plt.title("Matplotlib demo")

plt.xlabel("x axis caption")

plt.ylabel("y axis caption")

plt.plot(x,y,marker="o")code>

plt.show()

<code>from matplotlib import pyplot as plt

x=[5,8,10]

y=[12,16,6]

x2=[6,9,11]

y2=[6,15,7]

plt.bar(x,y,align='center')code>

plt.bar(x2,y2,color='g',align='center')code>

plt.title("bar graph")

plt.ylabel("Y axis")

plt.xlabel("X axis")

plt.show()

<code>from matplotlib import pyplot as plt

import numpy as np

a=np.array([22,87,5,43,56,73,55,54,11,20,51,5,79,31,27])

plt.hist(a,bins=[0,20,40,60,80,100])

plt.title("historgram")

plt.show()

 

 

<code>

import matplotlib.pyplot as plt

import numpy as np

x=np.linspace(0,2*np.pi,400)

y=np.sin(x**2)

fig,ax=plt.subplots()

ax.plot(x,y)

ax.set_title("Simple plot")

f,(ax1,ax2)=plt.subplots(1,2,sharey=True)

ax1.plot(x,y)

ax1.set_title("sharing Y axis")

ax2.scatter(x,y)

fig,axs=plt.subplots(2,2,

subplot_kw=dict(projection="polar"))code>

axs[0,0].plot(x,y)

axs[1,1].scatter(x,y)

plt.show()

 

 



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。