我有一個測驗用例,重塑陣列會改變結果plt.imshow:
import numpy as np
import matplotlib.pyplot as plt
from skimage import io
file_raw_path = "8258792/Fig5_ColorfulCell_raw.tif"
im = io.imread(file_raw_path)
im= np.max(im, axis=0)
im_reshaped = im.reshape((im.shape[1],im.shape[2],im.shape[0]))
for i in range(im.shape[0]):
plt.imshow(im[i],cmap='gray')
plt.show()
for i in range(im_reshaped.shape[2]):
plt.imshow(im_reshaped[...,i],cmap='gray')
plt.show()
第一個回圈顯示這些影像:

第二個回圈顯示了這個影像(當然是同一件事的 5 倍......):

知道為什么會這樣嗎?!
uj5u.com熱心網友回復:
np.reshape()不移動任何資料;它只是改變了軸“環繞”的位置。您可以將其視為首先展平輸入陣列,然后將資料包裝在軸上以適應新形狀。
>>> arr = np.arange(6).reshape(2, 3)
array([[0, 1, 2],
[3, 4, 5]])
>>> arr.reshape(3, 2)
array([[0, 1],
[2, 3],
[4, 5]])
>>> arr.
如果您從左到右,從上到下閱讀,所有數字的順序相同。
您可能想要np.transpose()和朋友,它們(本質上)將資料打亂以更改軸的順序,以便im[i, j, k] == im.transpose(1, 2, 0)[j, k, i](注意,它實際上并沒有移動任何資料,它只是看起來像那樣)。對于您的用例,np.moveaxis(im, 0, -1)將執行相同的操作,并且更易于閱讀(“將軸 0 移動到末尾”)。
>>> arr.transpose(1, 0)
array([[0, 3],
[1, 4],
[2, 5]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/478264.html
標籤:Python 麻木的 matplotlib
下一篇:Centos7部署Redis集群
