🌈個人主頁:羽晨同學?
💫個人格言:“成為自己未來的主人~”???
副本和視圖
副本
副本是一個數據的完整的拷貝,如果我們對副本進行修改,它不會影響到原始數據,物理內存不再同一位置。副本一般發生在Python序列的切片操作,調用deepCopy()函數。調用ndarray的copy()函數產生一個副本。
視圖
視圖是數據的一個別稱或者引用,通過該別稱或引用亦便可訪問,操作原有數據,但原有數據不會產生拷貝,如果我們對視圖進行修改,它會影響到原始數據,物理內存在同一位置。
視圖一般發生在numpy的切片操作返回原數據的視圖,調用ndarray的view()函數產生一個視圖。
賦值
簡單的賦值不會創建數組對象的副本。相反,它使用原始數組的相同id()來訪問它,id()返回Python對象的通用標識符,類似于C中的指針。
此外,一個數組的任何變化都反映在另一個數組上。例如:一個數組的形狀改變也會改變另一個數組的形狀。
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()方會創建一個新的數組對象,該方法創建的新數組的維數變化不會改變原始數據的維數
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)
而使用切片創建視圖修改數據會影響到原始數組:
import numpy as nparr=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()函數創建一個副本,對副本數據進行修改,不會影響到原始數據,它們物理內存不在同一位置。
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開源替代方案。
舉一個畫一元線性方程的簡單例子:
import numpy as np
from matplotlib import pyplot as pltx=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()
import numpy as np
from matplotlib import pyplot as pltx=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")
plt.show()
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')
plt.bar(x2,y2,color='g',align='center')
plt.title("bar graph")
plt.ylabel("Y axis")
plt.xlabel("X axis")
plt.show()
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()
?
?
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"))
axs[0,0].plot(x,y)
axs[1,1].scatter(x,y)
plt.show()
?
?