「夫を成功」へ導く妻の秘訣 座談会

今,マトリックスを作成しこのマトリックスの配列を行列入替ようとしています.

ネットで調べた結果下記の方法が見つかりましたが,使用方法が良く解りません.

http://msdn.microsoft.com/ja-jp/library/bb199546(v=xnagamestudio.40)

現状,元のマトリックスはcsv.matrix 入替後のマトリックスはNewmatrixという名前のマトリックスに

格納したいと考えております.

どの様にすれば良いか本当にご教授お願いたします.

このQ&Aに関連する最新のQ&A

A 回答 (1件)

プログラムの先頭に


using Microsoft.Xna.Framework;
を追加しておいて、
Matrix.Transpose(csv.matrix, Newmatrix);
とすればよいのではありませんか。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QC#でcsvファイルの列を入れ替えたい

C#初心者です。

以下のように、カンマ区切りのcsvファイルの特定の列を入れ替えて保存するアプリを作ろうとしています。
■変更前
りんご,赤,1,
みかん,オレンジ,2
メロン,黄緑,3

■変更後
1,赤,りんご,
2,オレンジ,みかん,
3,黄緑,メロン,

以下のような概略フローを考えてみたのですが、
(3)の処理を実行する場合、どのような実装すれば良いか分かりません。

■概略フロー
(1)1行ずつTextFieldParserで、string配列に読み込む
(2)任意の列の値を左から順番を指定して並べ替える
 No.3の列を左から1列目に指定⇒No.3の列を左から3列目に指定
(3)並べ替えた配列をカンマ区切りで再結合する

どなたかご教示いただけると助かります。

Aベストアンサー

TextFieldParser の流れなら ReadFields() で 1行分を列ごとに分けて読み込むわけだから、あとは任意の順番で文字列連結すればいいんじゃない?

string[] rowData = parser.ReadFields();
ConsoleWriteLine(rowData[2] + "," + rowData[1] + "," + rowData[0]);
とか

QC#にて別クラスの関数を使いたい

C#にて、別クラスの関数を使用する方法を教えてほしいです。

下記のような、構造体を受け取るメソッドを作りました。

*****************************
private struct MyPoint
{
public int x;
public int y;
}

private void proc1(MyPoint pt)
{
MessageBox.Show("座標:" ; pt.x + "," + pt.y + "実行結果");
}

private void button1_Click(object sender ,System.EventArgs e)
{

MyPoint pt;
pt.x = 10;
pt.y = 20;
proc(pt);
}
*****************************

別のフォームのクラスから、proc1を呼び出したいのですが、やり方がわかりません。
どうか、教えてください。

Aベストアンサー

同じ定義をしたとしても別の名前空間に書いた構造体は同一とはみなされません。

呼び出し先クラスでの構造体を private では無く、public で宣言して下さい。

呼び出し元では、

MyClass.MyPoint pt;

のようにして実体を作ります。

Q転置行列アルゴリズム

こんにちは。プログラミングを学んでいる学生です。
N*Nのint型の配列を転置するCプログラムでなるべく性能の良いものを書け、という課題が出て、それと同時にシンプルな(性能が悪いと思われる)サンプルが配布されてました。
ですが、それを超えるようなアルゴリズムがどうしても思いつきません。
何かアドバイスいただけたらうれしいです。

配布メソッド:
#define N 64 //Nは64,128,512,...,2048をはかる
typedef int matrix_t[N][N];
void naive_rotate(matrix_t src, matrix_t dst){
  int i,j;
  for(i=0;i<N;i++)
  for(j=0;j<N;j++)
     dst[N-1-j][i]=src[i][j];
return;
}

メソッドの7行目をdst[j][i]にしたらあまり変化ありませんでした。
また、i==Jのときcontinueするようにしたら、逆に遅くなってしまいました。

こんにちは。プログラミングを学んでいる学生です。
N*Nのint型の配列を転置するCプログラムでなるべく性能の良いものを書け、という課題が出て、それと同時にシンプルな(性能が悪いと思われる)サンプルが配布されてました。
ですが、それを超えるようなアルゴリズムがどうしても思いつきません。
何かアドバイスいただけたらうれしいです。

配布メソッド:
#define N 64 //Nは64,128,512,...,2048をはかる
typedef int matrix_t[N][N];
void naive_rotate(matrix_t src, matrix_t dst){
  int i,j;
...続きを読む

Aベストアンサー

 
 "ANo.1"訂正。
void func(int a[][N], int b[][N], int n)
{
int i, j;

for(i = 0; i < n / 2; i ++){
for(j = i; j < n - i - 1; j ++){
b[i][j] = a[j][n - i - 1];
b[j + 1][i] = a[i][n - j - 2];
b[n - i - 1][j + 1] = a[j + 1][i];
b[j][n - i - 1] = a[n - i - 1][n - j - 1];
}
}
if(n % 2) b[n / 2][n / 2] = a[n / 2][n / 2];
}

Q行列内の行の交換,列の交換をするプログラム

行列内の行の交換,列の交換を行うプログラムを作成しています.
http://www.math.meiji.ac.jp/~mk/lecture/ouyousuurijikken/matrix-lib-v2/node20.html
のページにある方法で行交換はすることができたのですが,列交換をする方法がわかりません.
上のサイトのやり方を改造して,どうにか列交換をすることはできないのでしょうか?
分かる方おられましたら回答ください.
よろしくお願いします.

Aベストアンサー

要素を1つ1つ交換するしかないと思います。
行の方は参照時に行管理用のポインタを通してアクセスしているので、ポインタを入れ替えるだけですみますが、
列の方はそのような構成になっていないので要素ごとに処理する必要があります。
行列の実装方法を変えれば列の交換もスムーズにできるようにはなりますが、
そのようにしてしまうと、現在のような2次元配列ライクな記法はできなくなりますし、
要素にアクセスする際の無駄が増えますので、用途を限定しない場合にはやめた方が良いでしょう。

それから、エラー処理が少し甘いですね。
new_matrix()内のabody=malloc()の部分で失敗した場合、行の管理用に確保したメモリ(a=malloc())が解放されませんので。
この可能性を無視する、というのなら、せめて要求メモリサイズの大きいabodyの方を先に確保する方が良いでしょう。

QC#でのExcel操作について.(Rangeオブジェクトへの複数範囲設定)

C#でExcelのグラフを作成させるプログラムを書いるのですが,Rangeオブジェクトへの離れたセルの複数範囲を指定したいのですが,いろいろ調べてみましたがどうしても解決できません.
調べた限りではVBではできるようですが,C#ではできないのでしょうか?

Excel.ChartObjects chartObjects =(Excel.ChartObjects)oSheet.ChartObjects(Type.Missing);
Excel.ChartObject chartObj = chartObjects.Add(100, 100, 700, 400);
Excel.Chart chart = chartObj.Chart;
Excel.Range chartRange = oSheet.get_Range("B1","B3");
/*↑の部分で("B1:B3,B5:B8,C5")のようなことをしたいです.RangeにAddメソッドのようなものがあればと思っているのですが無いみたいなので‥‥*/
chart.SetSourceData(chartRange,Excel.XlRowCol.xlColumns);
Excel.SeriesCollection seriesCollection=(Excel.SeriesCollection)chart.SeriesCollection(Type.Missing);

よろしくお願いします.

C#でExcelのグラフを作成させるプログラムを書いるのですが,Rangeオブジェクトへの離れたセルの複数範囲を指定したいのですが,いろいろ調べてみましたがどうしても解決できません.
調べた限りではVBではできるようですが,C#ではできないのでしょうか?

Excel.ChartObjects chartObjects =(Excel.ChartObjects)oSheet.ChartObjects(Type.Missing);
Excel.ChartObject chartObj = chartObjects.Add(100, 100, 700, 400);
Excel.Chart chart = chartObj.Chart;
Excel.Range chartRange = oSheet.get_Rang...続きを読む

Aベストアンサー

Excel.Range chartRange = oSheet.get_Range("B1:B3,B5:B8,C5", Missing.Value);
でよいのではないでしょうか?
(Missingは using System.Reflection)
(私はC#の知識は全くありませんがVC# 2005 Express Editionで確認しました)

参考URL:http://support.microsoft.com/default.aspx?scid=kb;ja;302096

QC#で文字列から数値だけ取得する方法

C#で文字列から数値だけ取得する方法

stringの文字列をcharの文字配列に入れなおして
数値の場合だけ、別の配列(例:a[3])にコピーする。
そんな方法で数値を抜き出そうかと思っています

ですが、文字列から数値だけを見つけ出して取得する方法がわかりません。

詳しくのっているサイトなどありましたら
教えてください…!!

Aベストアンサー

例えば、こんな感じかなぁ

string strSrc = "ABC123DEF456";
string strNum = "";

foreach (char c in strSrc )
{
if ( 0 <= c.CompareTo('0') && c.CompareTo('9') <= 0 )
{
strNum += c;
}
}
MessageBox.Show(strNum, "Test");

QC#で構造体の配列を持った構造体を使いたいのですが

C#で構造体の配列を持った構造体を使いたいのですが
Cならば
struct xyz {
struct abc _abc[32];
int index;
};
struct abc {
int a;
int b;
int c;
};

struct xyz _xyz[8];
xyz[0]._abc[3].b = 1;

のような使い方で という感じで やっていた事を C#で 同じような事をやろうとしても うまくいきません
うまくやる方法をどなたかご存知ないでしょうか

Visual Studio 2005行った場合
コンパイルで
構文エラーです。不適切な配列の宣言子です。マネージ配列を宣言するには、次元指定子を変数の識別子の前に指定します。固定サイズ バッファ フィールドを宣言するには、フィールド型の前に fixed キーワードを使用します
となり

fixed をつけると

固定サイズ バッファの型は次のうちの 1 つでなければなりません: bool、byte、short、int、long、char、sbyte、ushort、uint、ulong、float または double

となってしまいます

C#で構造体の配列を持った構造体を使いたいのですが
Cならば
struct xyz {
struct abc _abc[32];
int index;
};
struct abc {
int a;
int b;
int c;
};

struct xyz _xyz[8];
xyz[0]._abc[3].b = 1;

のような使い方で という感じで やっていた事を C#で 同じような事をやろうとしても うまくいきません
うまくやる方法をどなたかご存知ないでしょうか

Visual Studio 2005行った場合
コンパイルで
構文エラーです。不適切な配列の宣言子です。マネージ配列を宣言するに...続きを読む

Aベストアンサー

C# では、配列は「単なる連続したメモリ領域」ではなくて「添字によってオブジェクトを格納できるオブジェクト」であることに注意しなくてはいけません。つまり、C では配列は一種の構造体でしたが、C# では配列は参照型のオブジェクトです。
よって、C のように予めサイズを固定しておくということは基本的にできません。配列の大きさは配列のインスタンスが作られるときに動的に決まります。

C# では、参照型のオブジェクトを構造体のメンバにすることはあまりありません。null 値の扱いが面倒だからです。
また、C# では構造体の大きさは大きくとも 20 バイト程度までにします。C# では基本的に「構造体へのポインタ」はありません。巨大な構造体をそのまま扱うのはメモリの使い方の観点からいって非効率的です。

今回の件では、構造体ではなくクラスにするのがよいかと思われます。

Qフルパスから最後のディレクトリ名を取得したい。

vb.netなのですが、例えば
c:\aaa\bbb\ccc\ddd\eee\fff.exe
というフルパスがあったとして、
eeeというディレクトリ名を取得したいのですが、
何か良い方法はないでしょうか。
それぞれのディレクトリ名の文字数や階層数は
決まっていないのですが、オススメの方法が
ありましたら、教えて頂けると助かります。

Aベストアンサー

MessageBox.Show(IO.Path.GetFileName(IO.Path.GetDirectoryName(myPath)))

IO.Path の GetDirectoryName でフォルダのフルパスを取得して、さらに IO.Path の GetFileName で最終フォルダ(またはファイル)の名前を取得。

QC#「オブジェクト参照が必要です」(初心者)

Visual C# 2008を学習中なんですが、とりあえず何か作ってみようと思って、パラパラマンガに挑戦してみました。
Form1にpictureBox1を作り、waitを入れてイメージを書き換えるという単純なものです。
ところが実行しようと思ったら、「静的でないフィールド、メソッド、またはプロパティ’WindowsFormApplication1.Form1.pictureBox1’でオブジェクト参照が必要です」というエラーが出ます。その際のフォーカスは、main()内の
Form1.pictureBox1.image = Image.FromFile("motion1.png");
”Form1.pictureBox1”に当てられています。

何が原因と考えられるでしょうか。
もし情報不足であればご指摘いただくか、あるいはこの目的においてやらなければいけないこと、を大雑把に教えていただくだけでも幸いです。
よろしくお願いします。

Aベストアンサー

main()内に記述されているとのことですので、たぶん、
Form1.pictureBox1.Image=Image.FromFile("motion1.png");
Application.Run(new Form1());
と書いているのではないでしょうか?

連載 改訂版 C#入門 第3章 クラスとインスタンス
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_003/cs2_003_01.html#cs0302

ここであるように、オブジェクト指向にはクラスとインスタンスという概念があります。
今のコードでは、Form1クラスを操作しようとしているのでそのようなエラーが出ます。

具体的な解決方法としては、PictureBoxに初期画像を設定する処理をForm1のコンストラクタでやるのがいいと思います。
その際、redfox63さんがおっしゃられるように
this.pictureBox1
と記述することが必要です。(thisは自分自身のインスタンスを指します)

後は、Windowsフォームで一定間隔での処理をするための「Timerコンポーネント」について調べてみたらいいと思います。

タイマにより一定時間間隔で処理を行うには?(Windowsタイマ編)
http://www.atmarkit.co.jp/fdotnet/dotnettips/372formstimer/formstimer.html

MSDNライブラリ Timerクラス
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.timer.aspx

参考URL:http://www.atmarkit.co.jp/fdotnet/csharp_abc2/index/

main()内に記述されているとのことですので、たぶん、
Form1.pictureBox1.Image=Image.FromFile("motion1.png");
Application.Run(new Form1());
と書いているのではないでしょうか?

連載 改訂版 C#入門 第3章 クラスとインスタンス
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_003/cs2_003_01.html#cs0302

ここであるように、オブジェクト指向にはクラスとインスタンスという概念があります。
今のコードでは、Form1クラスを操作しようとしているのでそのようなエラーが出ます。

具...続きを読む

Qc#で(",")区切りのcsvファイルから読み込みを行うには?

駆け出しの初心者です。
以前c言語を少々勉強していてcsvファイルの読み込み、書き出しを練習していたのですが、最近c#を使うようになり、その便利さに圧倒されております。

今回c#で読み込みたいcsvファイルは以下のようになっております
"abc","123","あいうえお"

ただのカンマ区切りであれば読み込みは簡単ですが、
上記のようにダブルクオーテーションでそれぞれの文字列が囲まれている場合に文字列だけを読み込み、配列に代入していくのに何かスムーズな方法はありませんでしょうか?


ちなみに現在単純にカンマ区切りのcsvファイルを読み込むコードを
書いた所ですので、載せておきます
これをいじってスムーズにいければうれしいのですが、いかがでしょうか?

private void LoadData()
{
string path = "Data.csv";
string delimStr = ",";//区切り文字
char[] delimiter = delimStr.ToCharArray();
string[] strData;//分解後の文字用変数
string strLine;//1行分のデータ
Boolean fileExists = System.IO.File.Exists(path);
if (fileExists)
{
System.IO.StreamReader sr = new System.IO.StreamReader(
path,
System.Text.Encoding.Default);
while (sr.Peek() >= 0)
{
strLine = sr.ReadLine();
strData = strLine.Split(delimiter);
DataSet.DataTable.AddDataTableRow(
DateTime.Parse(strData[0]),
strData[1],
   strData[2],
int.Parse(strData[3]),
strData[4]);
}

sr.Close();
}


}


いつも丁寧な回答で協力してくれる皆様には心から感謝しております。
どうぞよろしくお願いします。

駆け出しの初心者です。
以前c言語を少々勉強していてcsvファイルの読み込み、書き出しを練習していたのですが、最近c#を使うようになり、その便利さに圧倒されております。

今回c#で読み込みたいcsvファイルは以下のようになっております
"abc","123","あいうえお"

ただのカンマ区切りであれば読み込みは簡単ですが、
上記のようにダブルクオーテーションでそれぞれの文字列が囲まれている場合に文字列だけを読み込み、配列に代入していくのに何かスムーズな方法はありませんでしょうか?


ちなみに...続きを読む

Aベストアンサー

こう応用するとよいです。
以下に全コードを載せておきますが、ポイントはこの一行です。
strData = strLine.Split(delimiter);

strData = CsvToArrayList1(strLine)[0];


private void LoadData() {
string path = "Data.csv";
string[] strData;//分解後の文字用変数
string strLine;//1行分のデータ
Boolean fileExists = System.IO.File.Exists(path);
if(fileExists) {
System.IO.StreamReader sr = new System.IO.StreamReader(path,System.Text.Encoding.Default);
while(sr.Peek() >= 0) {
strLine = sr.ReadLine();
strData = CsvToArrayList1(strLine)[0];//変更点
DataSet.DataTable.AddDataTableRow(
DateTime.Parse(strData[0]),
strData[1],
strData[2],
int.Parse(strData[3]),
strData[4]);
}

sr.Close();
}
}


//参照先<http://dobon.net/vb/dotnet/file/readcsvfile.html>
//参照先だとArrayListを返し値にしていますが使いづらいので、List<string[]>に変更しています。
public static System.Collections.Generic.List<string[]> CsvToArrayList1(string csvText) {
System.Collections.Generic.List<string[]> csvRecords =
new System.Collections.Generic.List<string[]>();

//前後の改行を削除しておく
csvText = csvText.Trim(new char[] { '\r', '\n' });

//一行取り出すための正規表現
System.Text.RegularExpressions.Regex regLine =
new System.Text.RegularExpressions.Regex(
"^.*(?:\\n|$)",
System.Text.RegularExpressions.RegexOptions.Multiline);

//1行のCSVから各フィールドを取得するための正規表現
System.Text.RegularExpressions.Regex regCsv =
new System.Text.RegularExpressions.Regex(
"\\s*(\"(?:[^\"]|\"\")*\"|[^,]*)\\s*,",
System.Text.RegularExpressions.RegexOptions.None);

System.Text.RegularExpressions.Match mLine = regLine.Match(csvText);
while(mLine.Success) {
//一行取り出す
string line = mLine.Value;
//改行記号が"で囲まれているか調べる
while((CountString(line, "\"") % 2) == 1) {
mLine = mLine.NextMatch();
if(!mLine.Success) {
throw new ApplicationException("不正なCSV");
}
line += mLine.Value;
}
//行の最後の改行記号を削除
line = line.TrimEnd(new char[] { '\r', '\n' });
//最後に「,」をつける
line += ",";

//1つの行からフィールドを取り出す
System.Collections.Generic.List<string> csvFields =
new System.Collections.Generic.List<string>();
System.Text.RegularExpressions.Match m = regCsv.Match(line);
while(m.Success) {
string field = m.Groups[1].Value;
//前後の空白を削除
field = field.Trim();
//"で囲まれている時
if(field.StartsWith("\"") && field.EndsWith("\"")) {
//前後の"を取る
field = field.Substring(1, field.Length - 2);
//「""」を「"」にする
field = field.Replace("\"\"", "\"");
}
csvFields.Add(field);
m = m.NextMatch();
}

csvFields.TrimExcess();
csvRecords.Add(csvFields.ToArray());

mLine = mLine.NextMatch();
}

csvRecords.TrimExcess();
return csvRecords;
}

/// <summary>
/// 指定された文字列内にある文字列が幾つあるか数える
/// </summary>
/// <param name="strInput">strFindが幾つあるか数える文字列</param>
/// <param name="strFind">数える文字列</param>
/// <returns>strInput内にstrFindが幾つあったか</returns>
public static int CountString(string strInput, string strFind) {
int foundCount = 0;
int sPos = strInput.IndexOf(strFind);
while(sPos > -1) {
foundCount++;
sPos = strInput.IndexOf(strFind, sPos + 1);
}

return foundCount;
}

こう応用するとよいです。
以下に全コードを載せておきますが、ポイントはこの一行です。
strData = strLine.Split(delimiter);

strData = CsvToArrayList1(strLine)[0];


private void LoadData() {
string path = "Data.csv";
string[] strData;//分解後の文字用変数
string strLine;//1行分のデータ
Boolean fileExists = System.IO.File.Exists(path);
if(fileExists) {
System.IO.StreamReader sr = new System.IO.StreamReader(path,System.Text.Encoding.Default);
while(sr.Peek() >= 0...続きを読む


人気Q&Aランキング