把列表中每一行的元素重复一次
mathematica吧
全部回复
仅看楼主
level 8
比如
Input:
A = Table[10 i + j, {i, 5}, {j, 2}]
Out:
{{11, 12}, {21, 22}, {31, 32}, {41, 42}, {51, 52}}
怎么得到
{{11, 12, 11, 12}, {21, 22, 21, 22}, {31, 32, 31, 32}, {41, 42, 41, 42}, {51, 52, 51, 52}}
尽可能用高效的方法
2013年09月16日 05点09分 1
吧务
level 15
A = Table[10 i + j, {i, 50000}, {j, 2}];
Replace[A, {a_, b_} -> {a, b, a, b}, {1}] // AbsoluteTiming
A /. {a_, b_} -> {a, b, a, b} // AbsoluteTiming
Cases[A, {a_, b_} -> {a, b, a, b}] // AbsoluteTiming
Flatten /@ Transpose@{A, A} // AbsoluteTiming
I
2013年09月16日 06点09分 2
回复 妙谛莲花 :嗯。总之最快的是最后一种,推荐最后一种啦!
2013年09月16日 07点09分
Faster one:Partition[Flatten[Transpose[ConstantArray[A, 2]]],4]; // AbsoluteTiming
2013年09月16日 07点09分
回复 mm_酱 :或者,ArrayReshape[Transpose@ConstantArray[A, 2], MapAt[2 # &, Dimensions[A], 2]]
2013年09月16日 08点09分
level 9
Map[Join[#, #] &, A] // AbsoluteTiming,
比Replace快,但比Flatten慢
最快的方法:
ArrayFlatten[{{A, A}}] // AbsoluteTiming
返回时间为0.001!
2013年09月16日 10点09分 3
最后这个很快
2013年09月16日 10点09分
回复 草红样 :老实说,并不是没想到用ArrayFlatten,但是研究了半天我搞不清楚它的语法啊……算了我另开一帖吧。
2013年09月16日 11点09分
level 8
ArrayFlatten这么快啊,比我的方法还快点
A = Table[10 i + j, {i, 5 10^6}, {j, 2}];
t1 = A[[All, {1, 2, 1, 2}]]; // AbsoluteTiming
t2 = ArrayFlatten[{{A, A}}]; // AbsoluteTiming
t1 == t2
2013年09月16日 11点09分 4
吧务
level 9
Join[A, A, 2] == t1 // AbsoluteTiming
这个不是最快,但简洁
2013年09月16日 11点09分 5
1