为了账号安全,请及时绑定邮箱和手机立即绑定

将一个大的numpy矩阵分层划分为10个独立的子矩阵

将一个大的numpy矩阵分层划分为10个独立的子矩阵

富国沪深 2024-01-04 15:33:32
我有两个 numpy 变量,包含 32000 个条目,如下所示:>>> filesarray(['GAN_0.npy', 'GAN_1.npy', 'GAN_10.npy', ..., 'GAN_822.npy',       'GAN_8220.npy', 'GAN_8221.npy'], dtype='<U13')>>> files.shape(32000,)>>> labelsarray([1, 1, 1, ..., 1, 1, 1])>>> np.unique(labels)array([0, 1])>>> labels.shape(32000,)换句话说,第一个变量是字符串的 NumPy 矩阵,而另一个变量是整数的 NumPy 矩阵。在第一个矩阵中,我有一个图像名称的字符串列表,在另一个矩阵中,我有一个整数作为我用来识别它们的标签(以名称 GAN_ 开头的图像为 1,而以名称 RAW_ 开头的图像为 0)。我想知道是否可以将这 32000 个条目分成 10 个子集,每个子集 3200 个图像而不重复,即 1600 个名称以 RAW_ 开头的条目和其他 1600 个名称以 GAN_ 开头的条目。图像的名称和标签被打乱,因此我不能简单地将大矩阵分成 10 个子矩阵。因此,Numpy 中是否有任何方法可以在 Python 中创建来自 2 个类的 10 个分层且独立的样本子矩阵?
查看完整描述

3 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

这是一个可能的解决方案:


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*”文件。如果您对这种排序不满意,您可以在创建每个数组后随时对其进行洗牌。


查看完整回答
反对 回复 2024-01-04
?
月关宝盒

TA贡献1772条经验 获得超5个赞

这是一个没有循环的解决方案(由@Crazy Coder在其他答案的评论中建议):


labels = np.array(labels, dtype=bool)

np.split(np.vstack((files[labels],files[~labels])).T.reshape(-1,1), 10)


查看完整回答
反对 回复 2024-01-04
?
喵喵时光机

TA贡献1846条经验 获得超7个赞


import numpy as np


#Read file names

file_names=np.genfromtxt('test_files.txt',dtype='str')

   

raw_vector=[]

gan_vector=[]


for i in range(0,file_names.shape[0]):


    image_name=file_names[i]


    #Separate RAW and GAN files

    if("RAW_" in image_name):

        raw_vector.append(image_name)


    if("GAN_" in image_name):

        gan_vector.append(image_name)

    

raw_vector=np.array(raw_vector)

gan_vector=np.array(gan_vector)


#Split into 10 subsets each

raw_vector_divided=np.split(raw_vector,10)

gan_vector_divided=np.split(gan_vector,10)


for j in range(0,10):

    x=raw_vector_divided[j]

    y=gan_vector_divided[j]

    

    x=x.reshape(x.shape[0],1)

    y=y.reshape(y.shape[0],1)

    

    #merge

    experiment_data=np.vstack((x,y))

    

    #Save subset as file

    np.savetxt( 'experiment-' + str(j+1) + '-data.txt',  experiment_data, fmt='%s')


print("finished") 


查看完整回答
反对 回复 2024-01-04
  • 3 回答
  • 0 关注
  • 50 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信