当前位置: 首页 > 知识库问答 >
问题:

使用R中的sample按列和行对矩阵进行采样

岳俊晖
2023-03-14

我正在尝试按列和行对R中的矩阵进行采样。我只能按列对矩阵进行采样:

mat_sampled <- mat[, sample(ncol(mat), size = 2), drop = FALSE]
mat_sampled

或按行使用:

mat_sampled <- mat[, sample(nrow(mat), size = 2), drop = FALSE]
mat_sampled

无论如何,我可以通过列和行对矩阵进行采样,以便我有一个大小 = 2 和一个 2x2 矩阵?

数据:

mat <- structure(c(0.00000936737064850479, -0.00000344035877221533, 
-0.00000588429413064886, -0.00000664093882822385, 0.000000163142912622386, 
-0.00000830665821831891, 0.00000288029434887303, -0.00000738776901251938, 
-0.00000204722452402808, 0.00000316098482315733, -0.00000851960904025358, 
-0.00000344035877221533, 0.0000162661560266947, 0.000015667146245672, 
0.0000176817401578245, -0.000000434373913718343, 0.0000221167783645216, 
-0.00000766888802504515, 0.0000196702025728993, 0.0000054508094435003, 
-0.00000841623657913487, 0.0000226837676407729, -0.00000588429413064886, 
0.000015667146245672, 0.0000378271485255422, 0.0000302423574746387, 
-0.000000742941082669109, 0.0000378279236951252, -0.0000131166531696689, 
0.0000336433683844706, 0.00000932291314345129, -0.0000143948973882355, 
0.0000387976864121218, -0.00000664093882822385, 0.0000176817401578245, 
0.0000302423574746387, 0.0000609597329197104, -0.000000838473769909237, 
0.0000426921091434878, -0.0000148032864090012, 0.0000379694737305786, 
0.0000105217201098132, -0.0000162458964272219, 0.0000437865708985388, 
0.000000163142912622386, -0.000000434373913718343, -0.000000742941082669109, 
-0.000000838473769909237, 0.000000326052715384182, -0.00000104878469924473, 
0.000000363661121358915, -0.000000932767293205516, -0.000000258479126056273, 
0.000000399100628669316, -0.00000107567151195169, -0.00000830665821831891, 
0.0000221167783645216, 0.0000378279236951252, 0.0000426921091434878, 
-0.00000104878469924473, 0.0000764928881113762, -0.0000185163338931623, 
0.0000474932007608493, 0.0000131608399176306, -0.0000203207878527069, 
0.0000547693765014893, 0.00000288029434887303, -0.00000766888802504515, 
-0.0000131166531696689, -0.0000148032864090012, 0.000000363661121358915, 
-0.0000185163338931623, 0.0000520534673039822, -0.0000164680421616108, 
-0.00000456345883565746, 0.00000704613683126169, -0.0000189910215976678, 
-0.00000738776901251938, 0.0000196702025728993, 0.0000336433683844706, 
0.0000379694737305786, -0.000000932767293205516, 0.0000474932007608493, 
-0.0000164680421616108, 0.0000466935923927192, 0.0000117049772323336, 
-0.0000180728859744263, 0.0000487107440703871, -0.00000204722452402808, 
0.0000054508094435003, 0.00000932291314345129, 0.0000105217201098132, 
-0.000000258479126056273, 0.0000131608399176306, -0.00000456345883565746, 
0.0000117049772323336, 0.000012972556693963, -0.0000050081770726872, 
0.0000134982333199051, 0.00000316098482315733, -0.00000841623657913487, 
-0.0000143948973882355, -0.0000162458964272219, 0.000000399100628669316, 
-0.0000203207878527069, 0.00000704613683126169, -0.0000180728859744263, 
-0.0000050081770726872, 0.0000724199402378186, -0.0000208417348282368, 
-0.00000851960904025358, 0.0000226837676407729, 0.0000387976864121218, 
0.0000437865708985388, -0.00000107567151195169, 0.0000547693765014893, 
-0.0000189910215976678, 0.0000487107440703871, 0.0000134982333199051, 
-0.0000208417348282368, 0.0000808412506325906), .Dim = c(11L, 
11L), .Dimnames = list(c("IEF", "HYG", "DVY", "XLV", "SHY", "IXUS", 
"TLT", "IVE", "PFF", "IAU", "VXUS"), c("IEF", "HYG", "DVY", "XLV", 
"SHY", "IXUS", "TLT", "IVE", "PFF", "IAU", "VXUS")))

编辑:我正在尝试对以下矩阵进行采样:

垫子上取样

                  IEF              HYG              DVY              XLV              SHY
IEF   0.0000093673706 -0.0000034403588 -0.0000058842941 -0.0000066409388  0.0000001631429
HYG  -0.0000034403588  0.0000162661560  0.0000156671462  0.0000176817402 -0.0000004343739
DVY  -0.0000058842941  0.0000156671462  0.0000378271485  0.0000302423575 -0.0000007429411
XLV  -0.0000066409388  0.0000176817402  0.0000302423575  0.0000609597329 -0.0000008384738
SHY   0.0000001631429 -0.0000004343739 -0.0000007429411 -0.0000008384738  0.0000003260527
IXUS -0.0000083066582  0.0000221167784  0.0000378279237  0.0000426921091 -0.0000010487847
TLT   0.0000028802943 -0.0000076688880 -0.0000131166532 -0.0000148032864  0.0000003636611
IVE  -0.0000073877690  0.0000196702026  0.0000336433684  0.0000379694737 -0.0000009327673
PFF  -0.0000020472245  0.0000054508094  0.0000093229131  0.0000105217201 -0.0000002584791
IAU   0.0000031609848 -0.0000084162366 -0.0000143948974 -0.0000162458964  0.0000003991006
VXUS -0.0000085196090  0.0000226837676  0.0000387976864  0.0000437865709 -0.0000010756715
                IXUS              TLT              IVE              PFF              IAU
IEF  -0.000008306658  0.0000028802943 -0.0000073877690 -0.0000020472245  0.0000031609848
HYG   0.000022116778 -0.0000076688880  0.0000196702026  0.0000054508094 -0.0000084162366
DVY   0.000037827924 -0.0000131166532  0.0000336433684  0.0000093229131 -0.0000143948974
XLV   0.000042692109 -0.0000148032864  0.0000379694737  0.0000105217201 -0.0000162458964
SHY  -0.000001048785  0.0000003636611 -0.0000009327673 -0.0000002584791  0.0000003991006
IXUS  0.000076492888 -0.0000185163339  0.0000474932008  0.0000131608399 -0.0000203207879
TLT  -0.000018516334  0.0000520534673 -0.0000164680422 -0.0000045634588  0.0000070461368
IVE   0.000047493201 -0.0000164680422  0.0000466935924  0.0000117049772 -0.0000180728860
PFF   0.000013160840 -0.0000045634588  0.0000117049772  0.0000129725567 -0.0000050081771
IAU  -0.000020320788  0.0000070461368 -0.0000180728860 -0.0000050081771  0.0000724199402
VXUS  0.000054769377 -0.0000189910216  0.0000487107441  0.0000134982333 -0.0000208417348
                VXUS
IEF  -0.000008519609
HYG   0.000022683768
DVY   0.000038797686
XLV   0.000043786571
SHY  -0.000001075672
IXUS  0.000054769377
TLT  -0.000018991022
IVE   0.000048710744
PFF   0.000013498233
IAU  -0.000020841735
VXUS  0.000080841251

预期的输出可能是这样的:

            IVE           SHY
IVE    0.0000466935924  -0.0000009327673
SHY    -0.0000009327673  0.0000003260527

我希望采取随机抽样,给我相同的行和列,保持列名和行名。

共有1个答案

公冶昆杰
2023-03-14

根据编辑进行调整。

如果您的行名和列名相同,则可以执行以下操作:

set.seed(0)
sub <- sample(colnames(mat), size = 2)
mat_sampled <- mat[sub,
                   sub, drop = FALSE]
 类似资料:
  • 我有两个列表,每个列表中有两个矩阵。。是否有一种方法可以对它们进行矩阵计算,即相加,其中matrix1中的蓝色矩阵与matrix2中的蓝色矩阵相加,matrix1中的红色矩阵与matrix2中的红色矩阵相加。我能想到的唯一方法是在循环中进行计算 请注意,我将有大约10个,以及不止一组(即蓝色、红色、绿色、紫色)

  • 我有一个矩阵,有很多行和列 使用 我想确定原始矩阵中每一行的第一次出现:这里有向量 我想出的最好的方法是使用既不高效也不优雅的循环的复杂和迂回的方法。我也知道data.frames的可能解决方案;那些涉及将行连接到字符串中的解决方案也是相当资源密集型的。 有没有使用基本R的优雅解决方案?

  • 中的值匹配功能非常有用。但据我理解,它不足以支持二维或高维输入。 例如,假设和是相同列数的矩阵,我想将的行与的行进行匹配。“R”函数调用不这样做。列表的输入也存在同样的不足。 我已经实现了我自己的版本,名为(附在下面),但我想知道您对此任务的解决方案是什么。

  • 使用JCUDA对复数进行运算的最佳方法是什么?我应该使用cuComplex格式还是有其他的解决方案(像一个数组,实部和虚部一个接着一个走)?我非常感谢使用这种类型的计算的java代码示例。 由于我的目的是用GPU求解复杂的线性方程组,所以我不想只附上jCuda。用GPU进行这样的计算有哪些可供选择的方式?

  • 假设我们有两个矩阵,即和,分别为和。 我们如何才能找到哪些行与行相同(反之亦然)? 优选的输出是矩阵,其行数等于矩阵和之间的标识行,两列,即第一列包含矩阵的行数,第二列包含矩阵的行数。

  • 我不是高级R用户。我主要用它来进行矩阵代数计算。我有一个大矩阵(9400×9400;675.1MB),我想反转。我尝试了“解决”函数和“胆量2inv”,我得到了“错误在......‘a’一定是一个复杂的矩阵”。我也尝试了从MASS包的ginv函数,我得到了错误消息在svd(X)错误:无限或丢失值在'x'。我确信我的矩阵没有空(全零)列或行。我检查了使用:从数据框中删除具有零值的列,我得到了相同的矩

  • 我有一个有三个带的光栅和一个有三个列的矩阵。 我想找到y的每一行和r的每一个单元格之间的角度。 我可以通过以下方式将光栅转换为矩阵: 现在,每个has矩阵都具有相同的形状(每个has矩阵中有3列,每行作为一个像素或来自y的样本)。我已经研究过如何使用嵌套的apply()函数,但老实说,我不理解语法,因此无法使其正常工作。 我有40个非常大的超光谱光栅(425个波段)和一个50行矩阵,我需要使用它来

  • 我正在实现一个稀疏矩阵类,使用映射向量来存储数据(映射表示矩阵的一行,其中键是列的索引,值是该位置的maitrix的值)我已经编写了计算行列式的函数,但我不知道是否有一种方法可以计算这种节省的时间(因为矩阵是稀疏的,大多数值为零)在这里我的实现: 这是类接口 我计算行列式的方式是什么?假设运算符()以这种方式重载 提前感谢您的帮助