zeros(length(unique(time)), 1);
时间: 2024-06-07 07:07:20 浏览: 94
这行代码是在 MATLAB 中创建一个长度为 time 中唯一值数量的全零向量。其中,unique(time) 返回 time 中的唯一值,length(unique(time)) 返回唯一值的数量,最后使用 zeros() 函数创建一个全零向量。这行代码可以用于初始化一个向量,以便在后续的计算中存储结果。
相关问题
base_efron <- function(y_test, y_test_pred) { time = y_test[,1] event = y_test[,2] y_pred = y_test_pred n = length(time) sort_index = order(time, decreasing = F) time = time[sort_index] event = event[sort_index] y_pred = y_pred[sort_index] time_event = time * event unique_ftime = unique(time[event!=0]) m = length(unique_ftime) tie_count = as.numeric(table(time[event!=0])) ind_matrix = matrix(rep(time, times = length(time)), ncol = length(time)) - t(matrix(rep(time, times = length(time)), ncol = length(time))) ind_matrix = (ind_matrix == 0) ind_matrix[ind_matrix == TRUE] = 1 time_count = as.numeric(cumsum(table(time))) ind_matrix = ind_matrix[time_count,] tie_haz = exp(y_pred) * event tie_haz = ind_matrix %*% matrix(tie_haz, ncol = 1) event_index = which(tie_haz!=0) tie_haz = tie_haz[event_index,] cum_haz = (ind_matrix %*% matrix(exp(y_pred), ncol = 1)) cum_haz = rev(cumsum(rev(cum_haz))) cum_haz = cum_haz[event_index] base_haz = c() j = 1 while(j < m+1) { l = tie_count[j] J = seq(from = 0, to = l-1, length.out = l)/l Dm = cum_haz[j] - J*tie_haz[j] Dm = 1/Dm Dm = sum(Dm) base_haz = c(base_haz, Dm) j = j+1 } base_haz = cumsum(base_haz) base_haz_all = unlist( sapply(time, function(x){ if else( sum(unique_ftime <= x) == 0, 0, base_haz[ unique_ftime==max(unique_ftime[which(unique_ftime <= x)])])}), use.names = F) if (length(base_haz_all) < length(time)) { base_haz_all <- c(rep(0, length(time) - length(base_haz_all)), base_haz_all) } return(list(cumhazard = unique(data.frame(hazard=base_haz_all, time = time)), survival = unique(data.frame(surv=exp(-base_haz_all), time = time)))) }改成python代码
def base_efron(y_test, y_test_pred):
time = y_test[:, 0]
event = y_test[:, 1]
y_pred = y_test_pred
n = len(time)
sort_index = np.argsort(time)
time = time[sort_index]
event = event[sort_index]
y_pred = y_pred[sort_index]
time_event = time * event
unique_ftime = np.unique(time[event != 0])
m = len(unique_ftime)
tie_count = np.asarray(np.histogram(time[event != 0])[0])
ind_matrix = np.tile(time, (n, 1)) - np.tile(time, (n, 1)).T
ind_matrix = (ind_matrix == 0).astype(int)
time_count = np.cumsum(np.bincount(time.astype(int)))
ind_matrix = ind_matrix[time_count, :]
tie_haz = np.exp(y_pred) * event
tie_haz = ind_matrix @ tie_haz
event_index = np.where(tie_haz != 0)[0]
tie_haz = tie_haz[event_index]
cum_haz = ind_matrix @ np.exp(y_pred)
cum_haz = np.flip(np.cumsum(np.flip(cum_haz)))
cum_haz = cum_haz[event_index]
base_haz = []
j = 0
while j < m:
l = tie_count[j]
J = np.linspace(0, l-1, l) / l
Dm = cum_haz[j] - J * tie_haz[j]
Dm = 1 / Dm
Dm = np.sum(Dm)
base_haz.append(Dm)
j += 1
base_haz = np.cumsum(base_haz)
base_haz_all = np.zeros_like(time)
for i, x in enumerate(time):
if np.sum(unique_ftime <= x) == 0:
base_haz_all[i] = 0
else:
base_haz_all[i] = base_haz[np.max(np.where(unique_ftime <= x))]
return {'cumhazard': np.unique(np.column_stack((base_haz_all, time)), axis=0),
'survival': np.unique(np.column_stack((np.exp(-base_haz_all), time)), axis=0)}
# !/usr/bin/env python # -*- coding:utf-8 -*- # author: haotian time:2019/9/14 import numpy as np f = open("./data/CD_Flight190914A.csv", "rb") excel = open("./data/time_flight.csv", "w+") # position_exl = open("./data/position_exl.csv", "w+") schedule = np.loadtxt(f, dtype=str, delimiter=",", skiprows=1, usecols=(4,)) # 分隔符 空格 Array = np.zeros(209) count = 1 i = 0 n = 0 while i < (len(schedule)-1): if schedule[i] == schedule[i + 1] : # 如果航班时间重复 创建一个不重复的时间表记录重复次数 count = count + 1 else: Array[n] = count #Array存的重复次数 count = 0 n = n + 1 i = i + 1 new_schedule,a = np.unique(schedule,return_index=True) #去掉相同时间的数据 # for i in range(len(position)): # position_exl.write(str(position[i])+',\n') # position_exl.close() # position_exl = open(("./data/position_exl.csv", "w+")) # position = np.loadtxt(position_exl, dtype=float, delimiter=",", skiprows=0, usecols=(0,)) # new_schedule = [len(position)*''] # n = 0 # numbers = [ int(x) for x in position ] # for i in range(numbers): # new_schedule[n] = schedule[i] # n = n + 1 excel.write("Schedule,PlaneNum"+'\n') for i in range(len(new_schedule)-1): excel.write(str(new_schedule[i])+","+str(Array[i])+",\n") excel.close() ''' 此时的数据time_flight.csv由于排序的原因导致时间的序列不一致, 最终数据用excel降序排列并保存到schedule_PlaneNum.csv中 '''完善并变为matlab上运行
你给出的代码似乎有些问题,例如在打开文件时需要指定文件编码方式,而且文件名中的斜杠应该使用双斜杠或者单斜杠。此外,你的代码中有一些注释会影响程序的执行,需要将其删除或者注释掉。下面是经过修改的代码:
```python
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author: haotian
# time: 2019/9/14
import numpy as np
f = open(".\\data\\CD_Flight190914A.csv", "r", encoding='utf-8')
excel = open(".\\data\\time_flight.csv", "w+", encoding='utf-8')
# position_exl = open(".\\data\\position_exl.csv", "w+", encoding='utf-8')
schedule = np.loadtxt(f, dtype=str, delimiter=",", skiprows=1, usecols=(4,))
Array = np.zeros(209)
count = 1
i = 0
n = 0
while i < (len(schedule)-1):
if schedule[i] == schedule[i + 1]:
count = count + 1
else:
Array[n] = count
count = 0
n = n + 1
i = i + 1
new_schedule, a = np.unique(schedule, return_index=True)
# for i in range(len(position)):
# position_exl.write(str(position[i])+',\n')
# position_exl.close()
# position_exl = open(".\\data\\position_exl.csv", "w+", encoding='utf-8')
# position = np.loadtxt(position_exl, dtype=float, delimiter=",", skiprows=0, usecols=(0,))
# new_schedule = [len(position)*'']
# n = 0
# numbers = [int(x) for x in position]
# for i in range(numbers):
# new_schedule[n] = schedule[i]
# n = n + 1
excel.write("Schedule,PlaneNum\n")
for i in range(len(new_schedule)-1):
excel.write(str(new_schedule[i])+","+str(Array[i])+",\n")
excel.close()
'''此时的数据time_flight.csv由于排序的原因导致时间的序列不一致,
最终数据用excel降序排列并保存到schedule_PlaneNum.csv中
'''
```
你还需要将代码中的 `np.loadtxt` 函数改为适用于 MATLAB 的读取数据函数,例如 `csvread` 或者 `readtable`。同时,你需要将文件路径中的斜杠改为 MATLAB 上可用的反斜杠,例如 ".\\data\\time_flight.csv"。修改后的代码如下:
```matlab
f = csvread('.\data\CD_Flight190914A.csv', 1, 3);
excel = fopen('.\data\time_flight.csv', 'w');
schedule = f(:, 2);
Array = zeros(209, 1);
count = 1;
i = 1;
n = 1;
while i < length(schedule)
if strcmp(schedule(i), schedule(i + 1))
count = count + 1;
else
Array(n) = count;
count = 1;
n = n + 1;
end
i = i + 1;
end
new_schedule = unique(schedule);
fprintf(excel, 'Schedule,PlaneNum\n');
for i = 1:length(new_schedule)
fprintf(excel, '%s,%d\n', new_schedule{i}, Array(i));
end
fclose(excel);
```
注意,在 MATLAB 中,字符串数组的索引从 1 开始,而不是从 0 开始,因此在代码的循环部分需要将 `i` 的初始值设为 1。同时,MATLAB 中的字符串比较需要使用 `strcmp` 函数。在输出 CSV 文件时,可以使用 `fprintf` 函数来控制格式。