python - 如何在我的数据集中找到每个折叠的实例数?
问题描述
我得到了一个包含数据的 .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)。折叠似乎是一个 1xN 矩阵,但我不确定,它包含范围为 {0,2} 的值。
我将如何找出每个折叠的实例数,如果可能的话,我将如何找出折叠的范围,即哪些实例属于哪些折叠(或将实例分组到它们自己的单独数组中,代表每个折叠比如,fold1 = x,fold2 = x_2 等)然后为每个折叠绘制一个直方图,以便分别绘制每种细胞类型的计数(总共 6 个图)?
解决方案
好的,由于您是编程新手,我将解释索引是如何工作的(在 numpy 中,它是 python 中几乎通用的数学库)。
假设我们有一个变量folds
定义为:
import numpy as np
folds = np.array([1,1,2,2,1,2,1,0,0,0,1,2,1,2,0,0,2,1])
我们可以通过执行列表推导轻松地计算每个折叠出现:
num_folds = 3
fold_counts = [np.sum(folds==I) for I in range(num_folds)]
#will return [5, 7, 6]
这将返回计数,因为我们将折叠中的每个元素与折叠数 0、1 和 2 进行比较(如果元素不等于 I,则返回 false,否则返回 true)。我们可以对布尔值求和(将它们设置为 1)以获得总量。
要回答您的其他问题,我们可以使用类似的代码将图像分成折叠:
#assuming images are in a list:
image_folds = [[images[J] for J in np.where(folds==I)[0]] for I in range(num_folds)]
#assuming images are in an array of size [num_images, width, height, channels]
image_folds = [images[folds==I] for I in range(num_folds)]
推荐阅读
- git - 在超级项目中提交和推送更改时,如何强制使用 git 子模块上的特定分支?
- javascript - datetimepicker 不更新值
- java - 尝试将 OneLogin OIDC 与 SpringBoot 一起使用时出错(错误:redirect_uri_mismatch)
- linux - 带有 SOCK_DGRAM 的 AF_PACKET 原始 IP 数据包需要分段吗?
- javascript - router.get 不起作用,但带有 id 的 router.get 有效
- hyperledger-fabric - 如何计算超级账本结构中的默克尔根?
- jquery - jquery查找文本等于foobar的标签元素
- java - 如何使用 ReflectionAPI 在 Map 上调用“put”方法
- ionic-framework - 单击选项卡按钮时,IONIC 4滚动到顶部
- ios - 使用 show(push) segue 时查看父视图内容