※ 引述《hollowowl (空鸮)》之铭言:
: 想问个在大家眼中可能很简单的问题(版上的文章好多看不懂ˊˋ
: 如题 但应该不能只用Partition或Flatten做到
: 假设我一开始画了一个30X30的数列
: A = RandomChoice[{-1, 1}, {30, 30}];
: s[i_, j_] := A[[i, j]];
: 每个都有标号s(1,1)、s(1,2)、...、s(2,1)、...、s(30,30)
: 然后每个都有对应的值(1或-1)
: 现在我想要把格子变大但是大小不变 也就是变成10X10
: 新的格自各自对应的质变成本来的9个值的相加
: 我不知道怎么去重新分配我的格子
: 举个简单的例子像
: ┌ ┬ ┬ ┬ ┬ ┬ ┬ ┬ ┬ ┐
: 1 1 1 2 2 2 3 3 3
: ├ ┼ ┼ ┼ ┼ ┼ ┼ ┼ ┼ ┤
: 1 1 1 2 2 2 3 3 3
: ├ ┼ ┼ ┼ ┼ ┼ ┼ ┼ ┼ ┤
: 1 1 1 2 2 2 3 3 3
: ├ ┼ ┼ ┼ ┼ ┼ ┼ ┼ ┼ ┤ ┌ ┬ ┬ ┐
: 4 4 4 5 5 5 6 6 6 09 18 27
: ├ ┼ ┼ ┼ ┼ ┼ ┼ ┼ ┼ ┤ ├ ┼ ┼ ┤
: 4 4 4 5 5 5 6 6 6 => 36 45 54
: ├ ┼ ┼ ┼ ┼ ┼ ┼ ┼ ┼ ┤ ├ ┼ ┼ ┤
: 4 4 4 5 5 5 6 6 6 63 72 81
: ├ ┼ ┼ ┼ ┼ ┼ ┼ ┼ ┼ ┤ └ ┴ ┴ ┘
: 7 7 7 8 8 8 9 9 9
: ├ ┼ ┼ ┼ ┼ ┼ ┼ ┼ ┼ ┤
: 7 7 7 8 8 8 9 9 9
: ├ ┼ ┼ ┼ ┼ ┼ ┼ ┼ ┼ ┤
: 7 7 7 8 8 8 9 9 9
: └ ┴ ┴ ┴ ┴ ┴ ┴ ┴ ┴ ┘
test={{1,1,1,2,2,2,3,3,3},{1,1,1,2,2,2,3,3,3},
{1,1,1,2,2,2,3,3,3},{4,4,4,5,5,5,6,6,6},
{4,4,4,5,5,5,6,6,6},{4,4,4,5,5,5,6,6,6},
{7,7,7,8,8,8,9,9,9},{7,7,7,8,8,8,9,9,9},
{7,7,7,8,8,8,9,9,9}};
(* size: 分割长度 *)
myans[mydata_?MatrixQ,size_?IntegerQ]:=Block[{s,l},
s[m_,n_]:=Total@Flatten@mydata[[m;;m+size-1,n;;n+size-1]];
l=Partition[Range[Length@mydata],size][[All,1]];
Table[s[i,j],{i,l},{j,l}]
]
MatrixForm@myans[test, 3]
(* 直接使用内建Partition函数 *)
Map[Total@Flatten[#]&,Partition[test,{3,3},3],{2}]