OSや言語が指定されていませんのでお答えできませんが...、「学習・教育」に投稿されているので、おそらく質問の内容のソフトを宿題か何かで作ろうとしているのでしょうが、「作ってください」というよりは 具体的に分からない箇所を書かれたほうがいいかと思いますよ。
http://www.okada.jp.org/RWiki/
RjpWiki - RjpWiki
フリー(GNU)の統計パッケージRではこうなります。
> mat<-matrix(floor(runif(100)*101),10,10)
> mat
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 22 44 74 59 63 72 56 65 52 90
[2,] 38 89 95 83 14 30 6 13 64 10
[3,] 75 51 44 14 27 34 49 72 22 34
[4,] 2 37 52 62 43 0 62 63 98 23
[5,] 15 22 17 73 60 90 16 69 40 51
[6,] 2 94 73 7 91 23 42 93 52 25
[7,] 86 90 33 18 22 27 34 27 93 37
[8,] 2 32 54 90 27 45 88 3 30 11
[9,] 70 36 32 74 82 95 56 3 80 99
[10,] 63 48 60 28 21 99 41 67 10 46
> cbind(apply(mat,1,sd),mat)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
[1,] 18.42130 22 44 74 59 63 72 56 65 52 90
[2,] 35.33899 38 89 95 83 14 30 6 13 64 10
[3,] 20.16488 75 51 44 14 27 34 49 72 22 34
[4,] 30.14705 2 37 52 62 43 0 62 63 98 23
[5,] 27.33354 15 22 17 73 60 90 16 69 40 51
[6,] 35.85403 2 94 73 7 91 23 42 93 52 25
[7,] 30.21424 86 90 33 18 22 27 34 27 93 37
[8,] 31.58692 2 32 54 90 27 45 88 3 30 11
[9,] 30.69220 70 36 32 74 82 95 56 3 80 99
[10,] 25.72526 63 48 60 28 21 99 41 67 10 46
0から100っていうのが100を含むのかどうかわかりませんが、
100を含まないときには101を100に
整数でなくていいときはfloorの部分を削除してください。
Rだとデフォルトでより高品質な<a href=”
” target=_blank>メルセンヌツイスター</a>での乱数です。
http://www.fuji.ne.jp/~excelyou/
Excelファンクラブ
URLはダミーです。
全要素とは、10行10列の乱数と各列の標準偏差ですよね?
EXCEL VBAでもよく、かつ、ten(10,10)をEXCELのワークシートとして、そこに値が表示(出力)させるのでよいのであれば、
Sub ten()
Dim i As Integer, j As Integer
For i = 1 To 10
For j = 2 To 11
Cells(i, j) = Int(Rnd() * 100)
Next j
Next i
For i = 1 To 10
Cells(i, 1) = Application.WorksheetFunction.StDev(Range(Cells(i, 2), Cells(i, 11)))
Next i
End Sub
これを標準モジュールにペーストして実行すれば出ます。
気分転換がてらやっつけで作ったので嘘が混じってるはず。OS,言語指定なしだったので適当にJavaで。
乱数(RND)とあるのでJavaではないんでしょうね。参考に。
次回からは分からないところだけ聞いた方がいいと思いますよ。作ってくださいだとちょっと・・・。
public class Deviation {
private static final int ROW_NUM = 10;
private static final int COLUMN_NUM = 10;
public static void main(String[] args) {
double[][] ten = createTen();
printTen(calcDeviation(ten));
}
private static double[][] createTen() {
double[][] ten = new double[ROW_NUM][COLUMN_NUM + 1];
for (int i = 0; i < ROW_NUM; i++) {
for (int j = 0; j <= COLUMN_NUM; j++) {
ten[i][j] = new Double(Math.random() * 100).intValue();
}
}
return ten;
}
private static double[] calcDeviation(double[] ten) {
for (int i = 0; i < ten.length; i++) {
double averageNum = average(ten[i]);
double[] powArray = new double[ten[i].length - 1];
for (int j = 1; j < ten[i].length; j++) {
powArray[j - 1] = Math.pow(ten[i][j] - averageNum, 2.0);
}
ten[i][0] = root(average(powArray));
}
return ten;
}
private static double sum(double[] array) {
double sum = 0;
for (int i = 0; i < array.length; i++) {
sum += array[i];
}
return sum;
}
private static double average(double[] array) {
return sum(array) / array.length;
}
private static double root(double num) {
return Math.sqrt(num);
}
private static void printTen(double[][] ten) {
for (int i = 0; i < ten.length; i++) {
for (int j = 0; j < ten[i].length; j++) {
System.out.println(”ten[” + i + ”][” + j + ”] = ” + ten[i][j]);
}
}
}
}
0番目と書かれているC言語でしょうか?ということでC言語で書いてみます。ちなみにrndのとこはtime関数を使った方がよいかもしれませんが、使い方を忘れてしまったので調べてみてください。URLは検算用です。
#include<stdio.h>
#include<math.h>
int main(){
int i,j,data;
float ten[10][11],mean[10];
/*tenに数を代入及び平均値の計算*/
for(i=0;i<10;i++){
ten[i][0]=0.0;/*変数の初期化*/
mean[i]=0.0;
for(j=1;j<11;j++){
data=(int)rand();/*ランダム値の生成*/
data=data%101;
ten[i][j]=data;
mean[i]=mean[i]+data;
}
mean[i]=mean[i]/10;
}
/*標準偏差の計算*/
for(i=0;i<10;i++){
for(j=1;j<11;j++){
ten[i][0]=ten[i][0]+pow(ten[i][j]-mean[i],2);/*分散の計算*/
}
ten[i][0]=sqrt(ten[i][0]/10);/*標準偏差の計算*/
}
/*結果の出力*/
for(i=0;i<10;i++){
for(j=0;j<11;j++){
if(j==0)printf(”標準偏差=%f:使用データ ”,ten[i][j]);/*小数部分*/
elseprintf(”%d ”,(int)ten[i][j]);/*整数部分*/
}
printf(”¥n”);/*改行*/
}
}
URLはダミーです。
Visual Basicで作ってみました。
この関数を実行すると、
戻り値に演算結果が整形されて返ります。
間違ってたらゴメンなさい。
適宜直してください(汗。
--------------------------------------
function GenerateRndMatrix() as string
Randomize Time
Dim row, col, sum As Integer
Dim avg, sum_dx As Double
Dim matrix(1 To 10, 0 To 10) As Double
Dim out As String
out = ””
For row = 1 To 10
sum = 0
For col = 1 To 10
matrix(row, col) = Int(Rnd() * 100)
sum = sum + matrix(row, col)
Next
avg = CDbl(sum) / 10
sum_dx = 0
For col = 1 To 10
sum_dx = sum_dx + (avg - matrix(row, col)) ^ 2
Next
matrix(row, 0) = Sqr(sum_dx / 10)
Next
For row = 1 To 10
out = out + Format(matrix(row, 0), ”###0.00”)
For col = 1 To 10
out = out + Format(matrix(row, col), ”, ###”)
Next
out = out + vbCrLf
Next
GenerateRndMatrix = out
end function
--------------------------------------
Pythonだとこういう風になるのかな。
#!/usr/bin/env python
from math import sqrt
from random import randint
def stdev(listdata):
ave = 0
for data in listdata:
ave += data
ave = ave / len(listdata)
sum = 0
for data in listdata:
sum += abs(data - ave) * abs(data - ave)
sum = sum / len(listdata)
return sqrt(sum)
matrixdata = [[randint(0, 100) for x in range(10)] for y in range(10)]
matrixdata.insert(0, [stdev(listdata) for listdata in matrixdata])
print matrixdata
URLはダミーです。
寝る前にphpで作りました。
# 置き換えただけですが。。。
はてなが<とか>とかに変換すると信じて貼り付けます(汗。
宜しくお願いします。
<?php
function make_seed() {
list($usec, $sec) = explode(’ ’, microtime());
return (float) $sec + ((float) $usec * 100000);
}
function GenerateRndMatrix() {
srand(make_seed());
$out = ”<table border=¥”1¥”>¥n”;
for($row=1; $row<=10; $row++) {
$sum = 0;
for($col=1; $col<=10; $col++) {
$matrix[$row][$col] = rand(0,100);
$sum = $sum + $matrix[$row][$col];
}
$avg = $sum / 10;
$sum_dx = 0;
for($col=1; $col<=10; $col++) {
$sum_dx += pow($avg - $matrix[$row][$col], 2);
}
$matrix[$row][0] = sqrt($sum_dx / 10);
}
for($row=1; $row<=10; $row++) {
$out.=”<tr>¥n”;
$out .= ereg_replace(” ”, ” ”, sprintf(”<td>%3.2f</td>”, $matrix[$row][0]));
for($col=1; $col<=10; $col++) {
$out .= ereg_replace(” ”, ” ”, sprintf(”<td>%3d</td>”, $matrix[$row][$col]));
}
$out.=”¥n</tr>¥n”;
}
$out.=”</table>¥n”;
return $out;
}
?>
<html>
<head>
<title>GenerateRndMatrix</title>
</head>
<body>
<?php echo GenerateRndMatrix(); ?>
</body>
</html>
コメント(0件)