※ 引述《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}]