Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matrix Mathematica help~随机更改矩阵中的元素_Matrix_Wolfram Mathematica - Fatal编程技术网

Matrix Mathematica help~随机更改矩阵中的元素

Matrix Mathematica help~随机更改矩阵中的元素,matrix,wolfram-mathematica,Matrix,Wolfram Mathematica,我有一个10X10矩阵,元素的值为-1或1。给定一个百分比,我想随机将元素的百分比更改为其相反的值。例如,如果我输入20%,我想随机更改20个元素;如果值为-1,我希望它更改为1,如果值为1,我希望它翻转为-1。我希望这是有道理的。谢谢 In[1]:= m = 2*RandomInteger[{0, 1}, {10, 10}] - 1 Out[1]= {{1, 1, -1, -1, -1, -1, 1, -1, 1, 1}, {-1, -1, 1, -1, -1, -1, -1, 1, 1,

我有一个10X10矩阵,元素的值为-1或1。给定一个百分比,我想随机将元素的百分比更改为其相反的值。例如,如果我输入20%,我想随机更改20个元素;如果值为-1,我希望它更改为1,如果值为1,我希望它翻转为-1。我希望这是有道理的。谢谢

In[1]:= m = 2*RandomInteger[{0, 1}, {10, 10}] - 1

Out[1]= {{1, 1, -1, -1, -1, -1, 1, -1, 1, 1},
 {-1, -1, 1, -1, -1, -1, -1, 1, 1, -1},
 {-1, -1, 1, -1, 1, 1, 1, 1, -1, 1},
 {1, 1, -1, 1, -1, -1, -1, 1, -1, -1},
 {1, -1, 1, 1, 1, -1, 1, -1, 1, 1},
 {-1, 1, 1, -1, -1, -1, -1, 1, 1, 1},
 {-1, -1, 1, 1, 1, 1, -1, 1, -1, 1},
 {-1, -1, -1, 1, -1, -1, -1, -1, -1, 1},
 {1, -1, 1, 1, 1, 1, -1, 1, -1, 1},
 {-1, -1, -1, 1, -1, 1, 1, -1, -1, 1}}

In[2]:= flip[m_, p_] := Module[{vm = m, v},
 v = RandomChoice[Range[100] - 1, p];
 For[i = 1, i <= p, i++,
  vm[[Quotient[v[[i]], 10] + 1, Mod[v[[i]], 10] + 1]] *= -1
 ];
 vm
];
fm = flip[m, 3] (* flip 3% *)

Out[3]= {{1, 1, -1, -1, -1, -1, 1, -1, 1, 1},
 {-1, -1, 1, -1, -1, -1, -1, 1, 1, -1},
 {-1, -1, 1, -1, 1, 1, 1, 1, -1, 1},
 {1, 1, -1, 1, -1, -1, -1, 1, -1, -1},
 {1, -1, 1, 1, 1, -1, 1, -1, 1, 1},
 {-1, 1, 1, -1, -1, -1, -1, 1, 1, 1},
 {-1, -1, 1, 1, -1, 1, -1, 1, -1, 1},
 {-1, -1, -1, 1, -1, 1, -1, -1, -1, 1},
 {1, -1, 1, 1, 1, 1, -1, 1, -1, 1},
 {-1, 1, -1, 1, -1, 1, 1, -1, -1, 1}}

In[4]:= MapThread[#1-#2&, {m, fm}] (*subtract matricies to hilight changes*)

Out[4]= {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
 {0, 0, 0, 0, 2, 0, 0, 0, 0, 0},
 {0, 0, 0, 0, 0, -2, 0, 0, 0, 0},
 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
 {0, -2, 0, 0, 0, 0, 0, 0, 0, 0}}

如果你想要20次翻转,你可以这样得到:

 example Partition[RandomSample[Table[-1, {20}]~Join~Table[1, {80}], 100], 10]

这个问题是有道理的。这是什么语言?您需要帮助的代码在哪里?
 (example = Table[1, {10}, {10}] ) // MatrixForm
 example RandomChoice[{80, 20} -> {1, -1} , {10, 10}] // MatrixForm
 example Partition[RandomSample[Table[-1, {20}]~Join~Table[1, {80}], 100], 10]