for j in range(len(one_sample.iloc[i])): if one_m.iloc[i - 1][j] == 1: one_deltaPre.iloc[i][j] = 1.0 elif one_m.iloc[i - 1][j] == 0: one_deltaPre.iloc[i][j] = one_deltaPre.iloc[i - 1][j] + 1.0 if one_m.iloc[i][j] == 1: one_lastvalues.iloc[i][j] = one_sample.iloc[i][j] elif one_m.iloc[i][j] == 0:
时间: 2024-04-26 14:26:27 浏览: 126
这段代码主要是用来处理缺失值的情况,其中one_sample表示一个样本,one_m表示缺失值的mask,one_lastvalues表示填充后的样本,one_deltaPre表示填充前的差值。具体来说,对于每一列的缺失值,如果前一个值存在,则用前一个值替代缺失值;如果前一个值也是缺失值,则用one_deltaPre来记录此时相对于第一个非缺失值的差值;如果当前值不是缺失值,则将其直接赋给one_lastvalues,表示填充后的样本。
相关问题
优化函数,使用GPU加速 def get_index(df, sendtime, idx_initial, temp_upper, temp_low, soc_low, soc_upper, sample_interval, time_interval, curr_interval, min_curr, soc_interval, data_point): index = [0] for i in idx_initial: n = 0 k = i while (n <= data_point) & (i <= len(df) - 100): idx_list = [] idx_list.append(i) for j in np.arange(i + 1, len(df)): if ((sendtime.iloc[j] - sendtime.iloc[k]).total_seconds() >= time_interval): break elif (df['max_temp'].iloc[j] <= temp_upper) & (df['min_temp'].iloc[j] >= temp_low) & \ (df['bat_module_soc_00'].iloc[j] >= soc_low) & (df['bat_module_soc_00'].iloc[j] <= soc_upper) & \ ((sendtime[j] - sendtime[i]).total_seconds() >= sample_interval) & \ ((sendtime.iloc[j] - sendtime.iloc[k]).total_seconds() <= time_interval) & \ (np.abs(total_current[j] - total_current[i]) >= curr_interval) & ( np.abs(soc[j] - soc[i]) <= soc_interval) & (np.abs(total_current[j]) >= min_curr): n += 1 idx_list.append(j) i = j if ((sendtime.iloc[j] - sendtime.iloc[k]).total_seconds() >= time_interval): break if len(idx_list) >= data_point: print(idx_list) index.append(idx_list) return index
为了使用GPU加速,在Python中,您可以使用Numba库来将函数编译为CUDA内核。以下是优化后的代码:
```
from numba import jit, cuda
import numpy as np
@jit(target ="cuda")
def get_index(df, sendtime, idx_initial, temp_upper, temp_low, soc_low, soc_upper, sample_interval, time_interval, curr_interval, min_curr, soc_interval, data_point):
index = [0]
total_current = df['total_current'].values
soc = df['bat_module_soc_00'].values
for i in idx_initial:
n = 0
k = i
while (n <= data_point) & (i <= len(df) - 100):
idx_list = []
idx_list.append(i)
for j in np.arange(i + 1, len(df)):
if ((sendtime[j] - sendtime[k]).total_seconds() >= time_interval):
break
elif (df['max_temp'].iloc[j] <= temp_upper) & (df['min_temp'].iloc[j] >= temp_low) & \
(soc[j] >= soc_low) & (soc[j] <= soc_upper) & ((sendtime[j] - sendtime[i]).total_seconds() >= sample_interval) & \
((sendtime[j] - sendtime[k]).total_seconds() <= time_interval) & (np.abs(total_current[j] - total_current[i]) >= curr_interval) & \
(np.abs(soc[j] - soc[i]) <= soc_interval) & (np.abs(total_current[j]) >= min_curr):
n += 1
idx_list.append(j)
i = j
if ((sendtime[j] - sendtime[k]).total_seconds() >= time_interval):
break
if len(idx_list) >= data_point:
print(idx_list)
index.append(idx_list)
return index
```
请注意,Numba的CUDA目标需要将函数中的所有数据转换为Numpy数组或CUDA设备数组。因此,我们将`total_current`和`soc`列转换为NumPy数组。此外,我们还使用`target ="cuda"`将函数编译为CUDA内核。这将使Numba利用GPU加速函数。
column_name = ["label"] column_name.extend(["pixel%d" % i for i in range(32 * 32 * 3)]) dataset = pd.read_csv('cifar_train.csv') #dataset = pd.read_csv('heart.csv') #dataset = pd.read_csv('iris.csuv') #sns.pairplot(dataset.iloc[:, 1:6]) #plt.show() #print(dataset.head()) #shuffled_data = dataset.sample(frac=1) #dataset=shuffled_data #index=[0,1,2,3,4,5,6,7,8,9,10,11,12,13] #dataset.columns=index dataset2=pd.read_csv('test.csv') #X = dataset.iloc[:, :30].values #y = dataset.iloc[:,30].values mm = MinMaxScaler() from sklearn.model_selection import train_test_split #X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=0) X_train =dataset.iloc[:,1:].values X_test = dataset2.iloc[:,1:].values y_train = dataset.iloc[:,0].values y_test = dataset2.iloc[:,0].values print(y_train) # 进行独热编码 def one_hot_encode_object_array(arr): # 去重获取全部的类别 uniques, ids = np.unique(arr, return_inverse=True) # 返回热编码的结果 return tf.keras.utils.to_categorical(ids, len(uniques)) #train_y_ohe=y_train #test_y_ohe=y_test # 训练集热编码 train_y_ohe = one_hot_encode_object_array(y_train) # 测试集热编码 test_y_ohe = one_hot_encode_object_array(y_test) # 利用sequential方式构建模型 from keras import backend as K def swish(x, beta=1.0): return x * K.sigmoid(beta * x) from keras import regularizers model = tf.keras.models.Sequential([ # 隐藏层1,激活函数是relu,输入大小有input_shape指定 tf.keras.layers.InputLayer(input_shape=(3072,)), # lambda(hanshu, output_shape=None, mask=None, arguments=None), #tf.keras.layers.Lambda(hanshu, output_shape=None, mask=None, arguments=None), tf.keras.layers.Dense(500, activation="relu"), # 隐藏层2,激活函数是relu tf.keras.layers.Dense(500, activation="relu"), # 输出层 tf.keras.layers.Dense(10, activation="softmax") ])
你的代码中存在一些问题:
1. 你导入的库 `Keras` 和 `backend` 应该是 `tensorflow.keras` 和 `tensorflow.keras.backend`。以你需要将代码中的 `ker` 和 `backend` 替换为 `tensorflow` 和 `tensorflow.keras.backend`。
2. 你在模型中使用的激活函数 `swish` 并没有定义。你可以在使用之前定义一个 `swish` 函数,可以参考以下示例:
```python
def swish(x, beta=1.0):
return x * tf.sigmoid(beta * x)
```
3. 在创建模型时,你使用了 `tf.keras.models.Sequential`,但是你导入的是 `keras` 库而不是 `tensorflow.keras` 库。所以你需要将代码中的 `keras.models.Sequential` 替换为 `tensorflow.keras.models.Sequential`。
4. 在模型的第一层之前,你可以添加一个 `tf.keras.layers.InputLayer` 来指定输入的形状。你可以将其添加到模型定义的开头,如下所示:
```python
model = tf.keras.models.Sequential([
tf.keras.layers.InputLayer(input_shape=(3072,)),
...
])
```
根据上述修改,你的模型定义应该如下所示:
```python
import tensorflow as tf
def swish(x, beta=1.0):
return x * tf.sigmoid(beta * x)
model = tf.keras.models.Sequential([
tf.keras.layers.InputLayer(input_shape=(3072,)),
tf.keras.layers.Dense(500, activation="relu"),
tf.keras.layers.Dense(500, activation="relu"),
tf.keras.layers.Dense(10, activation="softmax")
])
```
请注意,我只修改了与模型定义相关的部分。如果你的代码中还有其他问题,你需要继续检查并做出相应的修改。
阅读全文