我正在尝试创建一个训练数据文件,其结构如下:
[Rows = Samples,Columns = features]
因此,如果我有100个样本和2个特征,我的np.array的形状将是(100,2)。
下面的列表包含.nrrd 3D样本补丁数据文件的路径字符串。
['/Users/FK/Documents/image/0128/subject1F_200.nrrd',
'/Users/FK/Documents/image/0128/subject2F_201.nrrd']
这是我到目前为止的代码:
training_file = []
# For each sample in my image folder
for patches in dir_0128_list:
# Reads the 64x64x64 numpy array
data, options = nrrd.read(patches)
# Calculates the median and sum of the 3D array file. 2 Features per sample
f_median = np.median(data)
training_file.append(f_median)
f_sum = np.sum(data)
training_file.append(f_sum)
# Calculates a numpy array with the following shape (169,) containing 169 features per sample.
f_mof = my_own_function(data)
training_file.append(f_mof)
training_file = np.array((training_file), dtype=np.float32)
# training_file = np.column_stack((core_training_list))
如果我不使用np.column_stack函数,我会得到一个(173,1)矩阵。 (1,173)如果我运行该功能。在这种情况下,它应该具有(2,171)形状。
我想计算总和和中位数并将其附加到列表或numpy数组列中。在for循环结束时,我想向下跳1行并为第二个样本添加2个特征列,依此类推......
答案 0 :(得分:0)
而不是
f_median = np.median(data)
training_file.append(f_median)
f_sum = np.sum(data)
training_file.append(f_sum)
你可以做到
training_file.append((np.median(data), np.sum(data)))
然后你仍然会有一段不容易重复使用且连续测试的连续代码。 我会构建脚本的不同部分
def read_patches(files):
for file in files:
yield nrrd.read(file)
让生成器产生补丁信息
def parse_patch(patch):
data, options = patch
return np.median(data), np.sum(data)
from pathlib import Path
file_dir = Path(<my_filedir>)
files = file_dir.glob('*.nrrd')
patches = read_patches(files)
training_file = np.array([parse_patch(patch) for patch in patches], dtype=np.float32)
这可能看起来很复杂,但它允许轻松测试每个子块