#python #shuffle
Вопрос:
Я пытаюсь перетасовать свои данные, которые я назвал new_array, но когда я это делаю, он возвращает массив X_shuffled того же размера, но с нулями. Я понятия не имею, почему, так как в моем new_array есть все значения, поэтому X_shuffled должен отображать массив с перетасованными сигналами.
Я вернулся к основам, просто построил два массива и использовал shuffle, и, как вы можете видеть, это сработало нормально.
X=np.array([[1.1,2.2,3.3,4.4],[1.2,2.3,3.4,4.5],[2.1,2.2,2.3,2.4],[3.1,3.2,3.3,3.4],[4.1,4.2,4.3,4.4]])
print(X.shape)
y=np.array([0.1,0.2,0.2,3,4])
X_shuffle, Y_shuffle = shuffle(X,y)
Мой проблемный код прикреплен ниже.
import numpy as np
from sklearn import preprocessing
from sklearn.utils import shuffle
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
def frequency_labels(s_frequency):
L = []
for w, f2 in enumerate(s_frequency):
l = " {} Hz".format(f2)
print("f1=",f2)
L.append(l)
return L
def time_labels(time):
H = []
for r,t in enumerate(time):
h = " {} s".format(t)
H.append(h)
return H
def gaussian_noise(increment,len_time):
mean = 0
standard_deviation = np.arange(0.5,2.2,increment)
## want 8096 different noise signals of different standard deviations
sd = standard_deviation.reshape(len(standard_deviation),1)
noise = np.empty((len(sd), (len_time), (1)), dtype=np.float16)
for t, value in enumerate(sd):
noise[t] = np.random.normal(mean,value,len_time).reshape(len_time,1)
return noise
max_freq = 50
s_frequency = np.arange(0,60,0.1) # range of frequencies
fs = 200
time = np.arange(0,5-(1/fs),(1/fs))
amplitude = np.empty((len(time)), dtype=np.float16)
len_time = len(time)
len_frequency = len(s_frequency)
array = np.empty((len(time)), dtype=np.float16)
increment = 0.1 #0.00021
L = frequency_labels(s_frequency)
H = time_labels(time)
k = 0
noise = gaussian_noise(increment,len_time)
new_array = np.empty((len(s_frequency)*(len(noise)),len(time)),dtype=np.float16)
training_labels = []
for f1 in s_frequency:
#amplitude of signal and adding the noise onto this
amplitude = np.sin(2*np.pi*f1*time).reshape(len(time),1)
amplitude = np.add(noise,amplitude).reshape(len(noise),len(time))
#Normalizing between -1 and 1
for r in range(17):
average = float(min(amplitude[r,:]) max(amplitude[r,:]))/2
rangev = float(max(amplitude[r,:]) - min(amplitude[r,:]))/2
new_array[k] = (amplitude[r,:] - average)/rangev
for q in range(17):
training_labels.append(f1)
k = k 1
training_labels = np.array(training_labels).reshape((len(s_frequency)*len(noise)),)
#shuffle the data
X_shuffled, Y_shuffled = shuffle(new_array.astype('float64'), training_labels,random_state=0)
x_train, x_test, y_train, y_test = train_test_split(X_shuffled,Y_shuffled,test_size=0.2)
Есть какие-нибудь идеи, почему это происходит?