一、项目需求
训练集数据为六类音乐([“classical”, “jazz”, “country”, “pop”, “rock”, “metal”]),格式为.wav ,每类音乐都有100首 音乐分类器项目,主要运用到了傅里叶变换函数 很多东西越在高维空间处理起来就会变得越是简单 例如:书本上的文字是一维,漫画图像是二维,视频是三维(加上了时间维度),你喜欢看书还是看图画书还是看电影? 很显然,视频更容易让人们所接受
一条直线,你从正面看是一条直线,当你从侧面看时,则变成了一个点,这就是观察方向的不同导致的结果不同,但是有影响吗?这根直线还是这根直线,没有变,只不过观察方向角度变了而已。 音乐是有多个频率所构成的,傅里叶公式可以简单的理解为从另一个角度进行观察音乐频率 正常的我们是通过前方(时间维度)进行观察聆听音乐的,而傅里叶则是从右侧(频域)进行观察的 大家都知道,任何一个连续函数都可以用正弦函数叠加,故音乐则可以理解为多个正弦函数的叠加 当你从傅里叶的角度(右侧)进行观察时,就会发现实则是多个峰或者说是多条直线而已,问题瞬间变得简单了
二、数据集
这里的音乐使用的都是单声道的音乐(.wav ),通过傅里叶变换将音频进行转化为频谱(.fft.npy ) 若其他同学手边有数据也可以自己进行转换 可以参考该篇博文:.wav音乐文件转换为.fft.npy频谱格式文件 若不想自己动手转换,可以直接使用这个数据集:.fft.npy格式音乐经过傅里叶变换得到的频谱数据集
训练集: 测试集:
三、完整代码
需要修改的地方: rad = "G:/PyCharm/workspace/machine_learning/trainset/"+g+"."+str(n).zfill(5)+ ".fft"+".npy" 训练集路径 wavfile.read("G:/PyCharm/workspace/machine_learning/trainset/sample/heibao-wudizirong-remix.wav") 测试集路径
import numpy as np
from sklearn import linear_model, datasets
import matplotlib.pyplot as plt
from scipy.stats import norm
from scipy.fftpack import fft
from scipy.io import wavfile
"""
n = 40
# hstack使得十足拼接
# rvs是Random Variates随机变量的意思
# 在模拟X的时候使用了两个正态分布,分别制定各自的均值,方差,生成40个点
X = np.hstack((norm.rvs(loc=2, size=n, scale=2), norm.rvs(loc=8, size=n, scale=3)))
# zeros使得数据点生成40个0,ones使得数据点生成40个1
y = np.hstack((np.zeros(n),np.ones(n)))
# 创建一个 10 * 4 点(point)的图,并设置分辨率为 80
plt.figure(figsize=(10, 4),dpi=80)
# 设置横轴的上下限
plt.xlim((-5, 20))
# scatter散点图
plt.scatter(X, y, c=y)
plt.xlabel("feature value")
plt.ylabel("class")
plt.grid(True, linestyle='-', color='0.75')
plt.savefig("D:/workspace/scikit-learn/logistic_classify.png", bbox_inches="tight")
"""
"""
# linspace是在-5到15的区间内找10个数
xs=np.linspace(-5,15,10)
#---linear regression----------
from sklearn.linear_model import LinearRegression
clf = LinearRegression()
# reshape重新把array变成了80行1列二维数组,符合机器学习多维线性回归格式
clf.fit(X.reshape(n * 2, 1), y)
def lin_model(clf, X):
return clf.intercept_ + clf.coef_ * X
#---logistic regression--------
from sklearn.linear_model import LogisticRegression
logclf = LogisticRegression()
# reshape重新把array变成了80行1列二维数组,符合机器学习多维线性回归格式
logclf.fit(X.reshape(n * 2, 1), y)
def lr_model(clf, X):
return 1.0 / (1.0 + np.exp(-(clf.intercept_ + clf.coef_ * X)))
#----plot---------------------------
plt.figure(figsize=(10, 5))
# 创建一个一行两列子图的图像中第一个图
plt.subplot(1, 2, 1)
plt.scatter(X, y, c=y)
plt.plot(X, lin_model(clf, X),"o",color="orange")
plt.plot(xs, lin_model(clf, xs),"-",color="green")
plt.xlabel("feature value")
plt.ylabel("class")
plt.title("linear fit")
plt.grid(True, linestyle='-', color='0.75')
# 创建一个一行两列子图的图像中第二个图
plt.subplot(1, 2, 2)
plt.scatter(X, y, c=y)
plt.plot(X, lr_model(logclf, X).ravel(),"o",color="c")
plt.plot(xs, lr_model(logclf, xs).ravel(),"-",color="green")
plt.xlabel("feature value")
plt.ylabel("class")
plt.title("logistic fit")
plt.grid(True, linestyle='-', color='0.75')
plt.tight_layout(pad=0.4, w_pad=0, h_pad=1.0)
plt.savefig("D:/workspace/scikit-learn/logistic_classify2.png", bbox_inches="tight")
"""
"""
使用logistic regression处理音乐数据,音乐数据训练样本的获得和使用快速傅里叶变换(FFT)预处理的方法需要事先准备好
1. 把训练集扩大到每类100个首歌而不是之前的10首歌,类别仍然是六类:jazz,classical,country, pop, rock, metal
2. 同时使用logistic回归和KNN作为分类器
3. 引入一些评价的标准来比较Logistic和KNN在测试集上的表现
"""
genre_list = ["classical", "jazz", "country", "pop", "rock", "metal"]
X = []
Y = []
for g in genre_list:
for n in range(100):
rad = "G:/PyCharm/workspace/machine_learning/trainset/"+g+"."+str(n).zfill(5)+ ".fft"+".npy"
fft_features = np.load(rad)
X.append(fft_features)
Y.append(genre_list.index(g))
X = np.array(X)
Y = np.array(Y)
"""
# 首先我们要将原始数据分为训练集和测试集,这里是随机抽样80%做测试集,剩下20%做训练集
import random
randomIndex=random.sample(range(len(Y)),int(len(Y)*8/10))
trainX=[];trainY=[];testX=[];testY=[]
for i in range(len(Y)):
if i in randomIndex:
trainX.append(X[i])
trainY.append(Y[i])
else:
testX.append(X[i])
testY.append(Y[i])
"""
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X, Y)
"""
#----train knn classifier-----------------------
from sklearn.neighbors import NearestNeighbors
neigh = NearestNeighbors(n_neighbors=1)
neigh.fit(trainX)
predictYknn=map(lambda x:trainY[neigh.kneighbors(x,return_distance=False)[0][0]],testX)
# 将predictYlogistic以及predictYknn与testY对比,我们就可以知道两者的判定正确率
a = np.array(predictYlogistic)-np.array(testY)
print a, np.count_nonzero(a), len(a)
accuracyLogistic = 1-np.count_nonzero(a)/(len(a)*1.0)
b = np.array(predictYknn)-np.array(testY)
print b, np.count_nonzero(b), len(b)
accuracyKNN = 1-np.count_nonzero(b)/(len(b)*1.0)
print "%f" % (accuracyLogistic)
print "%f" % (accuracyKNN)
"""
print('Starting read wavfile...')
sample_rate, test = wavfile.read("G:/PyCharm/workspace/machine_learning/trainset/sample/heibao-wudizirong-remix.wav")
testdata_fft_features = abs(fft(test))[:1000]
print(sample_rate, testdata_fft_features, len(testdata_fft_features))
type_index = model.predict([testdata_fft_features])[0]
print(type_index)
print(genre_list[type_index])
"""
from sklearn.metrics import confusion_matrix
cmlogistic = confusion_matrix(testY, predictYlogistic)
cmknn = confusion_matrix(testY, predictYknn)
def plotCM(cm,title,colorbarOn,givenAX):
ncm=cm/cm.max()
plt.matshow(ncm, fignum=False, cmap='Blues', vmin=0, vmax=2.0)
if givenAX=="":
ax=plt.axes()
else:
ax = givenAX
ax.set_xticks(range(len(genre_list)))
ax.set_xticklabels(genre_list)
ax.xaxis.set_ticks_position("bottom")
ax.set_yticks(range(len(genre_list)))
ax.set_yticklabels(genre_list)
plt.title(title,size=12)
if colorbarOn=="on":
plt.colorbar()
plt.xlabel('Predicted class')
plt.ylabel('True class')
for i in range(cm.shape[0]):
for j in range(cm.shape[1]):
plt.text(i,j,cm[i,j],size=15)
plt.figure(figsize=(10, 5))
fig1=plt.subplot(1, 2, 1)
plotCM(cmlogistic,"confusion matrix: FFT based logistic classifier","off",fig1.axes)
fig2=plt.subplot(1, 2, 2)
plotCM(cmknn,"confusion matrix: FFT based KNN classifier","off",fig2.axes)
plt.tight_layout(pad=0.4, w_pad=0, h_pad=1.0)
plt.savefig("d:/confusion_matrix.png", bbox_inches="tight")
"""
输出结果如下: 其中44100为采样率
"""
44100 [2.62963968e+08 4.46200714e+06 5.15395385e+06 4.43376757e+06
3.74566845e+06 4.70186729e+06 5.33935836e+06 4.61999477e+06
4.15225785e+06 3.30594588e+06 4.31103082e+06 5.05558675e+06
5.32297672e+06 4.85506026e+06 5.19126496e+06 4.14585787e+06
3.62846270e+06 4.75147337e+06 3.91082781e+06 4.62259775e+06
4.48238357e+06 3.23787122e+06 2.22014030e+06 3.78805307e+06
2.14269906e+06 3.13617469e+06 3.12430918e+06 4.46836068e+06
2.74392608e+06 3.78402588e+06 1.87577534e+06 3.49203803e+06
2.33558316e+06 3.81553507e+06 2.63688151e+06 3.02667708e+06
2.04674785e+06 2.22072034e+06 1.91995398e+06 1.98927890e+06
1.68224240e+06 1.35139077e+06 2.30549645e+06 6.03046897e+05
1.31438823e+06 1.95087823e+06 8.49833030e+05 1.19171948e+06
1.23251661e+06 1.89390106e+06 5.80352061e+05 1.50388290e+06
1.25938435e+06 1.02978969e+06 2.36614610e+05 3.01560843e+05
1.27662352e+06 1.49221129e+06 5.17213388e+05 8.00948818e+05
7.65561994e+05 3.62419277e+05 1.50979436e+06 3.85068213e+05
6.41942889e+05 3.61144502e+05 6.85268116e+05 1.00144583e+06
6.46261080e+05 1.40845476e+06 6.62866166e+05 6.91106024e+05
1.23208363e+06 1.36027432e+06 3.62846259e+05 5.72218147e+05
7.75993152e+05 9.14515445e+05 1.18571572e+06 9.02475526e+05
4.98999881e+05 1.74914232e+06 3.94735421e+05 1.22194083e+06
9.44511346e+05 5.64374132e+05 1.76153158e+06 1.92086536e+06
1.23147054e+06 3.62420572e+05 5.19808732e+05 1.34346298e+06
7.21219553e+05 8.88950439e+05 1.75325706e+06 2.29355413e+06
1.08391025e+06 9.30282476e+05 1.10235851e+06 3.67805257e+05
5.77443645e+05 5.94086277e+05 1.19729395e+06 5.34697818e+05
3.88725959e+05 7.87438862e+05 1.77019327e+06 1.66520041e+06
2.07569988e+06 7.36173308e+05 6.56954650e+05 1.61943917e+06
8.67054883e+05 1.26014326e+06 1.61921808e+06 1.54533344e+06
7.07774874e+05 1.62786750e+05 2.97020086e+05 1.13388210e+06
5.63030498e+05 9.58680710e+05 1.16377079e+06 9.77142004e+05
8.99557347e+05 4.93741261e+05 1.99306708e+05 1.20241539e+06
7.47989489e+04 1.67983186e+06 6.79762302e+05 8.65937699e+05
5.50519377e+05 1.72907596e+06 2.93786505e+05 7.75062173e+05
9.68810309e+05 1.43654854e+06 8.08623022e+05 2.59287374e+05
4.57334088e+05 9.85646332e+05 1.38921416e+06 1.17264490e+06
7.41666163e+05 2.05204503e+06 8.05602385e+05 7.40724129e+05
9.05423650e+05 4.47600257e+05 9.70026356e+05 1.19707145e+06
8.66600040e+05 9.09215043e+05 6.38983412e+05 6.24539950e+05
2.30489745e+05 9.49711853e+05 1.62124067e+06 1.33000213e+06
7.49378742e+05 4.94629349e+05 2.53593993e+05 8.26687520e+05
7.83442269e+05 1.10375179e+06 7.42007345e+05 5.10356938e+05
4.41047858e+05 8.81833105e+05 2.42540213e+06 3.30401795e+05
8.80062590e+05 6.49905701e+05 3.47149964e+05 1.05602066e+06
1.18980862e+06 1.96891139e+05 1.14120246e+06 8.02951614e+05
6.00111367e+05 6.69160363e+05 1.89491761e+05 5.95679660e+05
1.38204166e+06 1.21312932e+06 1.00683336e+06 1.71907045e+06
1.47929539e+06 1.05542669e+06 2.36641708e+06 9.33510819e+05
7.48075310e+05 1.77764553e+06 4.21246379e+05 7.90733672e+05
1.39589725e+06 7.09737413e+05 7.30502934e+05 1.25361964e+06
6.19123157e+05 6.88892351e+05 6.26028154e+05 8.54795006e+05
7.06965041e+05 1.21987749e+06 7.52060331e+05 4.71848433e+05
2.36098779e+05 8.47966863e+05 4.01129984e+05 1.27542408e+06
7.14220047e+05 5.18027090e+05 5.58925060e+05 2.79974210e+05
7.62875042e+05 1.84079472e+06 1.42550029e+06 1.14811203e+06
1.30128360e+06 1.24869130e+06 3.52352404e+05 4.21421728e+05
1.18173485e+06 5.10136084e+05 3.75560127e+05 4.79102195e+05
1.10333151e+06 2.05555702e+06 7.23702249e+05 3.61178799e+05
7.04851219e+05 1.44012108e+06 9.26402727e+05 2.02821056e+05
4.45325652e+05 7.90522874e+05 8.26436685e+05 1.17563229e+06
8.43867568e+05 4.01048078e+05 9.26085978e+05 6.44995771e+05
3.53685137e+05 8.34366832e+05 1.23386512e+06 7.02375781e+05
4.58931591e+05 8.43526489e+05 1.10676720e+06 7.68521715e+05
1.62269410e+06 1.58265455e+06 1.03200640e+06 4.64795983e+05
9.90089422e+05 5.24337673e+05 3.66658840e+05 6.55805698e+05
5.70752207e+05 2.76033608e+05 3.23297345e+05 1.33078141e+06
6.16117851e+05 3.63376716e+05 1.22034305e+06 1.87348103e+06
8.18691165e+05 2.43489854e+05 1.06339848e+06 1.38161299e+05
7.08259014e+05 1.32420185e+06 3.73634708e+05 4.74188119e+05
8.56522386e+05 1.18141641e+06 1.52211708e+06 4.07008939e+05
8.35340660e+05 6.40881238e+05 1.09076459e+06 1.21963072e+06
7.56369038e+05 1.14117511e+06 1.39389976e+06 5.10490203e+05
7.00735069e+05 2.37107675e+05 8.94992427e+05 1.53159359e+06
5.24539638e+05 7.88949376e+04 8.78275390e+05 1.68422430e+06
8.09255981e+05 4.57182807e+05 1.17241872e+06 2.09394245e+05
9.77952748e+04 8.97739813e+05 1.08742141e+06 9.69384074e+05
9.81838586e+05 5.07041429e+05 1.15578207e+06 3.49371827e+05
6.20229249e+05 3.60935229e+05 1.03026311e+06 3.46570750e+05
1.08685762e+06 1.66151632e+06 9.47736790e+05 4.26436467e+05
1.13526476e+06 5.84625497e+05 1.51928634e+06 9.70060181e+05
1.62523526e+06 6.11541462e+05 4.29298422e+05 4.61724329e+05
5.66555319e+05 1.29364175e+06 1.01953071e+06 1.94211951e+06
2.72120805e+05 1.14321213e+06 5.67287402e+05 1.94838376e+06
8.23364882e+05 1.62185476e+06 1.12559716e+06 4.55413724e+05
3.94762550e+05 9.96679018e+05 8.64137068e+05 9.73976199e+05
5.00463157e+05 5.05326117e+05 7.18463504e+05 3.00032365e+05
1.29926845e+06 9.28358383e+05 4.51525493e+05 4.65797885e+05
6.70108099e+05 1.00455574e+06 1.22544843e+05 7.84409036e+05
2.52051242e+06 1.13223858e+06 8.64798855e+05 7.61259423e+05
9.48682621e+05 5.33148975e+05 3.99035609e+05 1.47581282e+06
2.39172803e+06 6.02291705e+05 9.12335511e+05 1.10007913e+06
3.88451743e+05 3.18750364e+05 1.12384444e+06 5.00540271e+05
1.60319399e+05 7.27587480e+05 6.17185073e+05 1.35890728e+06
1.56238108e+06 9.65851067e+05 1.07019478e+06 1.63850864e+06
6.47843129e+05 2.65218848e+05 1.17738892e+06 1.19611403e+06
2.75522201e+05 1.34222981e+06 2.75771621e+05 1.98303864e+05
7.81263330e+05 3.26290246e+05 1.74968242e+06 7.61635689e+05
7.82203438e+05 4.37269114e+05 4.94924240e+05 4.04790850e+05
6.06235962e+05 1.14968590e+06 9.01138935e+05 3.87643407e+05
1.25101978e+06 1.25419381e+06 1.35912365e+06 1.10417253e+06
2.56006176e+05 1.68242848e+05 6.92147285e+05 5.62794655e+05
4.93718498e+05 5.32081292e+05 1.27889173e+06 1.07027869e+06
1.10223160e+06 1.21005716e+06 8.85081307e+05 9.54022330e+05
1.09599439e+06 1.00597502e+06 1.32263178e+06 9.81496867e+05
1.34961613e+06 9.75037511e+05 6.85154265e+05 2.74366226e+05
1.50605422e+06 1.24630822e+06 1.16136322e+06 5.19311262e+05
1.63678378e+06 1.00376123e+06 1.62954572e+06 5.53658511e+05
1.47319245e+06 1.16738338e+06 8.38245719e+05 1.09516870e+06
4.70652165e+05 4.84287731e+05 1.07054018e+06 1.51727656e+06
5.68360369e+05 1.13788710e+06 1.11524639e+06 5.50195476e+05
2.54789570e+06 6.70319933e+05 5.94055329e+05 1.40070839e+06
1.12209139e+06 6.66737961e+05 1.12603699e+06 7.59905686e+05
1.28043310e+06 1.73220091e+06 1.62539809e+06 1.43598424e+06
2.44608474e+05 9.76455920e+05 1.65895428e+06 4.74288051e+05
1.10317841e+06 7.60719720e+05 1.10148269e+06 1.22954150e+06
3.90806811e+05 7.68896458e+05 1.12202274e+06 1.20163265e+06
1.22283285e+05 3.95298481e+05 1.44100987e+06 1.13628142e+06
5.47027791e+05 1.44282330e+06 1.51116579e+06 2.94764054e+05
1.98303470e+06 6.60890367e+05 1.74400473e+05 3.43742919e+05
1.32702565e+06 9.70334589e+05 1.44755428e+06 1.19220440e+05
1.05416292e+06 7.65688495e+05 9.26620871e+05 1.05452545e+06
3.45971006e+05 1.38729419e+06 9.25768093e+05 5.78718349e+05
4.97405435e+05 6.38795336e+05 4.69704768e+05 1.08195127e+06
1.16430563e+06 1.12494833e+06 4.95913198e+05 1.77315771e+06
1.03099010e+06 4.83720528e+05 3.21831897e+06 2.89220027e+05
6.79691208e+05 5.54079998e+05 4.93231507e+05 6.97124088e+05
7.70214750e+05 3.41919222e+05 9.71853585e+05 3.02895802e+05
1.60873623e+06 1.19824400e+06 7.22427028e+05 7.13426231e+05
1.02447104e+05 7.53407279e+05 1.41847030e+06 1.17125187e+05
4.90554481e+05 2.22813151e+06 1.81816145e+06 2.00108016e+06
9.88524222e+05 6.66761214e+05 1.41700184e+06 1.73091718e+05
1.27497266e+06 8.84137125e+05 6.78333314e+05 1.25807940e+06
6.10437456e+05 6.18501388e+05 8.10004665e+05 1.52737362e+06
9.48293718e+05 8.16537529e+05 6.56080065e+05 2.61681911e+05
3.09335595e+05 1.61035190e+06 6.71864447e+05 7.03677274e+05
1.44948054e+06 1.33119383e+06 2.64438246e+06 8.99604614e+05
5.90471091e+05 1.99137527e+05 1.03576680e+06 2.36999135e+06
1.09501221e+06 2.70689106e+05 3.76008484e+05 2.13801101e+06
1.72034321e+06 1.03344188e+06 8.55742897e+05 5.82042271e+05
1.85276639e+06 8.23264426e+05 1.22193431e+06 6.48059124e+05
1.72918335e+06 1.45109304e+06 8.33139569e+05 1.05104656e+06
1.01674950e+06 1.49288532e+05 1.20247840e+06 4.39570274e+05
1.79832395e+06 9.98752681e+05 9.54955398e+05 4.28114058e+05
1.58621395e+05 9.38163338e+05 1.11554619e+06 7.80633423e+05
5.13067795e+05 5.03253676e+05 2.36904360e+05 4.99709843e+05
6.21949993e+05 2.25802159e+06 9.39527797e+05 1.23773463e+06
1.15677145e+06 6.43416576e+05 1.47631874e+06 5.80764306e+05
1.40761056e+05 6.16162073e+05 1.42090316e+06 2.47591155e+06
8.58620247e+05 7.11971890e+05 1.09890188e+06 2.79107673e+06
1.45876445e+06 1.12196751e+06 1.38826076e+06 8.28682888e+05
5.07527103e+05 1.05698761e+06 9.96337472e+05 9.74189758e+05
1.40487992e+06 3.70140740e+05 1.19378682e+06 2.54631763e+05
4.53796268e+05 1.44369582e+06 1.37487873e+06 1.33689697e+06
1.19280267e+06 1.13395796e+06 1.27007970e+06 2.57351451e+05
8.82385435e+05 1.82934432e+06 1.00658762e+06 1.65859345e+06
5.92281619e+05 8.42457890e+05 9.79791964e+05 7.08269013e+05
1.23456666e+06 1.39433050e+06 8.43614328e+05 1.04659730e+06
1.71332770e+05 1.27208163e+06 4.12933744e+05 1.19368294e+06
1.01983378e+06 1.14148324e+06 1.82837589e+06 2.17376752e+06
1.15679073e+06 9.52035769e+05 2.46305964e+06 1.64439928e+06
1.24728170e+06 1.68959811e+06 7.22742065e+05 1.33941200e+06
9.36138845e+05 1.08803636e+06 4.56648829e+05 1.46120228e+06
7.85178694e+05 1.03316831e+06 1.02764622e+06 1.15405102e+06
8.27220784e+05 8.50158280e+05 9.65043821e+05 1.23654857e+06
4.99115388e+05 1.94305570e+06 1.21088371e+06 1.30802627e+06
7.70917391e+05 1.17759305e+06 1.30818276e+06 1.62957354e+06
3.23667488e+06 8.67097278e+05 8.58457212e+05 2.72089170e+06
9.08574562e+05 2.04681724e+06 1.58712952e+06 8.40103134e+05
1.14604332e+06 1.16037077e+06 1.00681060e+06 7.75054827e+05
1.23125645e+06 1.53232299e+06 1.27156373e+06 9.17246636e+06
3.29590600e+06 2.05453011e+06 2.02744927e+06 2.04618268e+06
2.32258974e+06 2.15913282e+06 1.65675095e+06 7.94574368e+05
4.14347532e+05 1.34996904e+06 1.28450160e+06 1.70713907e+06
2.53389774e+06 7.53067108e+05 2.92109765e+06 1.35891954e+06
4.54258355e+05 9.69501203e+05 8.60747492e+05 1.25164114e+06
9.52457948e+05 1.41437482e+06 1.92057969e+06 1.93124142e+05
5.84525516e+05 1.02859923e+06 1.47588480e+06 2.11134185e+06
1.65883558e+06 1.83035726e+06 1.40076106e+06 1.68206907e+06
1.18123607e+06 2.46259139e+06 1.89125390e+06 5.48837412e+05
7.18930209e+05 1.57502106e+06 3.66499377e+05 2.68878538e+06
1.31642030e+06 3.74088262e+06 1.18170765e+06 1.32040737e+06
1.31853822e+06 2.69033216e+06 1.84839762e+06 4.25735850e+05
5.51234171e+05 1.09019441e+06 1.62550524e+06 6.57396223e+05
1.27844897e+06 5.16691913e+05 2.73157674e+06 6.23682863e+05
1.10991453e+06 2.27380293e+06 2.57710006e+06 2.31701722e+06
1.56106910e+06 2.77372354e+05 1.58545730e+06 7.49283564e+05
7.03092728e+05 8.22247656e+05 3.55201948e+05 2.82427331e+06
2.37488521e+06 1.02221032e+06 3.34250229e+05 1.76831695e+06
1.73407355e+06 1.01221178e+06 1.30767170e+06 2.06582328e+06
1.30939774e+06 9.02271429e+05 1.55282000e+06 2.66791517e+06
1.46070663e+06 2.36855447e+06 2.47778462e+06 1.65150285e+06
2.86038028e+06 2.11331093e+06 1.03168160e+06 4.20297050e+06
1.37391280e+06 1.75552249e+06 1.42466104e+06 2.02248038e+06
1.21328124e+06 1.47561521e+06 1.13083699e+06 1.99081397e+06
3.09330360e+06 2.30924547e+06 1.83329091e+06 8.09051867e+05
1.70263848e+06 1.10090664e+06 1.85819900e+06 2.38946190e+05
1.95820740e+06 1.52776711e+06 1.43756932e+06 1.85151140e+06
9.35115322e+05 1.53739367e+06 2.30774990e+06 1.12081960e+06
2.65094331e+06 2.91169399e+06 4.91570496e+05 1.37162558e+06
3.83845234e+06 2.79701207e+05 2.23682020e+06 2.85867756e+06
1.49590828e+06 2.75865210e+06 1.71068052e+06 3.17879941e+06
2.21070867e+06 1.25671294e+06 2.07236085e+06 8.59636914e+05
3.33143651e+06 2.82114412e+06 3.62873617e+06 2.30389801e+06
6.23386608e+05 1.14024549e+06 1.42623320e+06 2.94519898e+06
2.08760517e+06 2.12760802e+06 1.07203047e+06 2.72068954e+06
2.01460828e+06 1.46703960e+06 1.05998485e+06 1.90473064e+06
2.03451257e+06 8.09722707e+05 2.13045612e+06 1.62661941e+06
9.49332627e+05 1.84730206e+06 1.36601889e+06 2.20125544e+06
8.21619750e+05 2.45818166e+06 2.13201457e+06 1.65595139e+06
4.79679482e+06 3.51013300e+06 2.98771178e+06 1.26291467e+06
3.49019552e+06 2.52078746e+06 1.27835388e+06 1.91240226e+06
3.69107173e+06 2.30183493e+06 8.17798057e+05 7.77947217e+05
2.19533562e+06 6.88382070e+06 2.53170163e+06 1.50392284e+06
4.01454559e+06 1.66508164e+06 3.03868030e+06 4.26670365e+06
1.66979802e+06 5.97165928e+06 2.55894914e+06 2.30273943e+06
2.10731316e+06 3.13332555e+06 2.70468729e+06 1.16442579e+06
1.46038845e+06 2.46001200e+06 3.02604152e+06 2.30646781e+06
1.71304428e+06 2.54375702e+06 1.38768714e+06 1.06188052e+06
1.72130167e+06 1.38045148e+06 1.85959525e+06 1.72060287e+06
1.86311648e+06 1.97971883e+06 1.58367654e+06 1.57559405e+06
1.86531133e+06 1.26524498e+06 1.34270543e+06 1.87778217e+06
1.76837457e+06 2.91085940e+06 1.13059030e+06 2.17543391e+06
8.25995368e+05 1.21550029e+06 1.72464645e+06 5.32765444e+05
2.97267051e+06 2.80904696e+06 2.27706903e+06 2.45531515e+06
3.14674682e+06 2.77241682e+05 3.59494379e+06 4.70111975e+05
3.31343742e+05 1.05652740e+06 1.94506705e+06 2.54990736e+06
7.65698308e+05 2.91493658e+06 8.01963983e+05 1.72021815e+06
6.02022592e+05 1.04332293e+06 9.62060816e+05 3.36197104e+06
2.68663806e+06 1.13708602e+06 3.96654483e+06 2.81562282e+06
2.42820317e+05 8.35760918e+04 1.64158835e+06 3.30249874e+06
1.37157771e+06 2.12389794e+06 3.23269416e+06 8.45912977e+05
1.35140210e+06 5.35804806e+05 1.36545428e+06 1.30407902e+06
1.29210339e+06 1.52951059e+06 1.17959961e+06 1.33435273e+06
1.71725020e+06 4.32548267e+06 2.42964008e+06 1.09615191e+06
2.38000150e+06 2.08306149e+05 1.61729929e+06 1.69213408e+06
2.17676494e+06 1.32419195e+06 2.35247695e+06 1.22927245e+06
2.45801927e+06 2.54130142e+06 1.10460223e+06 2.83483470e+06
2.25941505e+06 1.26583137e+06 2.15877447e+06 5.32025563e+05
8.10206574e+05 1.21008066e+06 2.56992726e+05 7.78186822e+05
1.57350690e+06 2.42269187e+06 3.34769234e+06 7.14373786e+05
1.73231035e+06 1.85696403e+06 2.42095050e+06 3.28998084e+06
1.28149279e+06 2.59963754e+06 4.55552548e+05 2.40412906e+06
1.67189223e+06 1.89699896e+06 1.33405479e+06 3.33878299e+06
4.37661776e+05 2.09006809e+06 2.44695877e+06 1.65368993e+06
2.88437983e+06 5.02961252e+06 1.84002601e+06 2.26181835e+06
4.38511790e+05 6.49497481e+05 9.39676571e+05 1.74998019e+06
1.61242901e+06 2.62123426e+06 7.66639670e+05 1.56210836e+06
2.86459639e+06 5.66697186e+05 3.54691073e+06 2.69370989e+05
3.82912388e+06 3.37837033e+06 1.98066407e+06 3.18225345e+06
9.74247473e+05 1.75306814e+06 1.55180915e+06 2.91568266e+06] 1000
4
rock
"""
|