我似乎在存储使用pcolormesh
创建的地图时遇到了一些问题。据我所知,import numpy as np
import matplotlib.pyplot as plt
import matplotlib
from PIL import Image
import librosa
import librosa.display
from matplotlib import cm
fig = plt.figure(figsize=(12,4))
min = -1.828067
max = 22.70058
data = np.random.uniform(low=min, high=max, size=(474,40))
librosa.display.specshow(data.T,sr=16000,x_axis='frames',y_axis='mel',hop_length=160,cmap=cm.jet)
plt.axis('off')
plt.show()
raw_input("sadas")
convert = plt.get_cmap(cm.jet)
norm = matplotlib.colors.Normalize(vmin=0,vmax=1)
numpy_output_static = convert(norm(data.T))
plt.imshow(numpy_output_static,cmap = cm.jet, aspect = 'auto')
plt.show()
raw_input("asds")
使用色彩映射转换输入数据矩阵。色图为矩阵中的每个条目输出RGB值并绘制它。
在我的脑海中与
类似matplotlib
问题在于,数据的numpy数组表示为图,与第一个图显示的不同。我需要numpy来获得表示绘图的数据,这样如果我想绘制它,我将获得与第一个相同的图像,并且numpy数组的形状应该类似于用于的输入数据情节1.
numpy被馈送到神经网络,用于检测模式,这意味着表示在这里很重要。
那么如何让它存储实际的情节,没有所有红色的东西......
如果在s = s.replace(/([a-z])([A-Z])/g, '$1 $2');
中无法实现这一点,那么可以在其他库中执行此操作。
答案 0 :(得分:1)
数据范围从-1.828067
到22.70058
。但是,在第二个图中,您将其缩小到vmin=0
和vmax=1
之间的范围。因此,imshow
图中所有大于1的数据都将为红色。
如果您使用
norm = matplotlib.colors.Normalize(vmin=-1.828067,vmax=22.70058)
你应该得到原始阵列。
请注意,如果您不将数据转换为颜色数组,结果应该相同,这样整个转换可能是不必要的,您只需执行
plt.imshow(data.T,cmap = cm.jet, aspect = 'auto')
答案 1 :(得分:-1)
我最终做的是:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
from PIL import Image
import librosa
import librosa.display
from matplotlib import cm
from sklearn import preprocessing
min_max_scaler = preprocessing.MinMaxScaler(feature_range=(0, 1))
fig = plt.figure(figsize=(12,4))
min = -1.828067
max = 22.70058
data = np.random.uniform(low=min, high=max, size=(474,40))
librosa.display.specshow(data.T,sr=16000,x_axis='frames',y_axis='mel',hop_length=160,cmap=cm.jet)
plt.axis('off')
plt.show()
#raw_input("sadas")
convert = plt.get_cmap(cm.jet)
data = min_max_scaler.fit_transform(data)
print data.min()
print data.max()
numpy_output_static = convert(data.T)
plt.imshow(numpy_output_static, aspect = 'auto')
plt.show()
#raw_input("asds")
我可能习惯于将函数规范化不正确,并认为normalize会处理输入数据,这似乎并非如此。所以我在制作情节之前使用sklearn
来对其进行标准化。
然后再使用cmap。
结果是: