python - 将一个大的numpy矩阵分层分成10个独立的子矩阵
问题描述
我有两个带有 32000 个条目的 numpy 变量,如下所示:
>>> files
array(['GAN_0.npy', 'GAN_1.npy', 'GAN_10.npy', ..., 'GAN_822.npy',
'GAN_8220.npy', 'GAN_8221.npy'], dtype='<U13')
>>> files.shape
(32000,)
>>> labels
array([1, 1, 1, ..., 1, 1, 1])
>>> np.unique(labels)
array([0, 1])
>>> labels.shape
(32000,)
换句话说,第一个变量是字符串的 NumPy 矩阵,而另一个是整数的 NumPy 矩阵。在第一个矩阵中,我有一个图像名称的字符串列表,在另一个矩阵中,整数作为我用来识别它们的标签(以名称 GAN_ 开头的图像为 1,而名称为 RAW_ 的图像为 0)。
我想知道我是否可以将这 32000 个条目分成 3200 个图像的 10 个子集而不重复,即 1600 个名称以 RAW_ 开头的条目和其他 1600 个名称以 GAN_ 开头的条目。图像的名称和标签被打乱了,因此我不能简单地将大矩阵分成 10 个子矩阵。因此,Numpy 中是否有任何方法可以从 Python 中的 2 个类中创建 10 个分层且独立的样本子矩阵?
ps:这两个文件可以在这里找到
解决方案
这是一个可能的解决方案:
arrays = [np.concatenate((g, r))
for g, r in zip(np.array_split(files[labels==1], 10),
np.array_split(files[labels==0], 10))]
此解决方案保持“GAN*”和“RAW*”文件的相对顺序。此外,创建数组时,初始位置填充“GAN*”文件,其余位置填充“RAW*”文件。如果您对这种排序不满意,您可以在创建每个数组后随时对其进行洗牌。
推荐阅读
- python - 如何通过在视图中双击来修改模型的对象
- javascript - 如何以编程方式更改材料日历中的月份
- azure-logic-apps - 服务总线“发送一条或多条消息”操作如何工作?
- matlab - Matlab的加权方差
- c - 为什么我的整数在这里溢出和下溢?
- java - javax.naming.ServiceUnavailableException:套接字关闭
- dependency-injection - 如何在 Google Guice 中注入具有名称模式或正则表达式的属性列表?
- aws-sam-cli - SAM 构建仅使用 --use-container 参数成功完成
- .htaccess - .htaccess 重定向没有 WWW 到 HTTPS 不起作用
- smarty - 是否可以检查是否定义了(变量)修饰符(函数)?