我收到一个包含数据的.npz文件。我已经探索了数据集,并注意到它有5种数据类型:
cell_data = np.load("C:/Users/alexs/Documents/DataMining/cell-data.npz")cell_data.files
输出如下:
['images', 'counts', 'folds', 'compressed', 'allow_pickle']
以及附件图片。
我被告知数据集本身有3个折。计数是一个Nx6的矩阵,每行对应一个图像块,每列对应6种细胞类型(称为T1,T2, … , T6)。folds似乎是一个1xN的矩阵,但我并不确定,它包含的值范围是{0,2}。
我如何找出每个折的实例数量?如果可能的话,我如何找出折的范围,即哪些实例属于哪个折(或者将实例分组到各自的数组中,代表每个折,如fold1 = x, fold2 = x_2等),然后为每个折绘制一个直方图,使得每种细胞类型的计数分别绘制(总共6个图)?
回答:
好的,既然你对编程还不熟悉,我将解释索引是如何工作的(在numpy中,这是一个几乎通用的python数学库)。
假设我们有一个变量folds
,它被定义为:
import numpy as npfolds = np.array([1,1,2,2,1,2,1,0,0,0,1,2,1,2,0,0,2,1])
我们可以通过执行列表解析轻松计算每个折的出现次数:
num_folds = 3fold_counts = [np.sum(folds==I) for I in range(num_folds)]#将会返回 [5, 7, 6]
这将返回计数,因为我们将folds中的每个元素与折号0、1和2进行比较(如果元素不等于I则为false,否则为true)。我们可以对布尔值求和(将其设为1)来获得总数。
为了回答你的另一个问题,我们可以使用类似的代码将图像分成各自的折:
#假设图像在一个列表中:image_folds = [[images[J] for J in np.where(folds==I)[0]] for I in range(num_folds)]#假设图像在一个大小为[num_images, width, height, channels]的数组中image_folds = [images[folds==I] for I in range(num_folds)]