[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 04/08 07:38 / Filesize : 228 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

くだすれPython(超初心者用) その16



1 名前:デフォルトの名無しさん mailto:sage [2013/01/21(月) 16:36:03.35 ]
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。

エラーを解決したいときはエラー表示や環境(バージョン/IDE or command line)を略さずに書き込んで下さい。
騙りが頻発しています。質問する方は一時的なトリップをつけることを検討して下さい。
次スレは >>985 辺りで

前スレ
くだすれPython(超初心者用) その15
toro.2ch.net/test/read.cgi/tech/1350718465/
関連スレ
Pythonのお勉強 Part48
toro.2ch.net/test/read.cgi/tech/1358750040/
【実験台】 Python 3.0 のお勉強 Part 1 【非互換】
toro.2ch.net/test/read.cgi/tech/1235050215/
◆関連リンク
Python の Home Page
ttp://www.python.org/

75 名前:デフォルトの名無しさん mailto:sage [2013/01/28(月) 21:17:29.78 ]
テスト用データを作りました。
二個目の「〜である。」をとりたいです。
fast-uploader.com/file/6914931000681/
fast-uploader.com/file/6914930813025/

76 名前:デフォルトの名無しさん mailto:sage [2013/01/28(月) 21:18:58.40 ]
>>74
書き込みのため開けたんですけど、現時点で書き込めない状態なのでつかえてません。

77 名前:デフォルトの名無しさん mailto:sage [2013/01/28(月) 21:54:02.76 ]
>>76
ファイルからテキストを「読み込む」んだよね?何故書き込みモード…

それはさて置き。Noneになる原因は、
re.match だと line の先頭から走査するので、頭に余分な文字付いてるとその時点でマッチ失敗。
恐らく、やりたいことは re.finditerやre.search の方で出来る。

>>65
正規表現 HOW TO
docs.python.jp/2.7/howto/regex.html#regex-howto

正規表現モジュール
docs.python.jp/2.7/library/re.html

78 名前:デフォルトの名無しさん mailto:sage [2013/01/28(月) 23:16:02.71 ]
>>77
ありがとうございます。
書き込みモードなのは最後に出てきた「」をテキストファイルに起こしたかったからです。
re.finditerは複数とってきてしまい、行ごとに最後のマッチを取ってくることができないと思うのですが?
re.searchが取ってくるのは最初にマッチしたところではないのですか?
自分の理解力がないのだと思いますが・・・

79 名前:デフォルトの名無しさん mailto:sage [2013/01/29(火) 00:52:35.57 ]
>75
正規表現を2回使ってるけど,1回で目的は実現できると思う.
p = re.compile(ur'(.*?。それは(「.*?である。」))')
として,
L = p.findall(line)
とする.
最短一致".*?"を使うことで1行に
(A。それは「Bである。」)
が複数あってもLには
(A。それは「Bである。」)
のパターンに当てはまる全ての要素が格納される.
でもって,「.*?である。」を半角カッコでくくることでグループのリストが入る.(参考: ttp://d.hatena.ne.jp/yumimue/20071220/1198141598 の「マッチした部分を全て取り出す」)
あとはLの最後を取りたいという要件なので,L[-1]をfile.txtに書けば良い.

以上を踏まえて,こんな感じでどうでしょうか?
# coding: utf-8
import re, codecs
p = re.compile(ur'(.*?。それは(「.*?である。」))')
f = codecs.open('file.txt', 'w', 'utf-8')
for line in codecs.open('a.txt', 'r', 'utf-8'):
  L = p.findall(line)
  if L:
    f.write(L[-1] + '\r\n')
    print L[-1]
f.flush()
f.close()

80 名前:デフォルトの名無しさん mailto:sage [2013/01/29(火) 09:43:15.98 ]
最短マッチの使い方
pattern = ur'(([^。(]+)。それは「([^。]+)である。」)' # 行の全ての (A。それは「Bである。」) にマッチ
last_match = ur'^.*' + pattern # 行の最後に現れるパターンだけにマッチ
first_match = ur'^.*?' + pattern # 行の最初に現れるパターンだけにマッチ
これをfinditerでループを回せばどれでも望みの結果が得られる。

81 名前:デフォルトの名無しさん mailto:sage [2013/01/29(火) 12:19:35.52 ]
>>79-80
ありがとうございます。
期待した結果がとれました。

82 名前:デフォルトの名無しさん mailto:sage [2013/01/29(火) 12:35:55.41 ]
文字列同士の引き算をしたい場合は、replaceを使って消すしかないですかね?

単純に"あいうえお" - "えお" = "あいう"
こういうことをしたいのですが。

83 名前:デフォルトの名無しさん [2013/01/29(火) 13:41:05.05 ]
"あいうえお" - "えお" = -1



84 名前:デフォルトの名無しさん mailto:sage [2013/01/29(火) 13:59:38.88 ]
a = set(u"あいうえお")
b = set(u"えお")
c = a - b
print "".join(c)

85 名前:デフォルトの名無しさん mailto:sage [2013/01/29(火) 16:33:41.34 ]
>>83,84
ありがとうございます。

86 名前:デフォルトの名無しさん mailto:sage [2013/01/29(火) 18:19:51.08 ]
>>85
参考までに聞きたいんだが、文字列の引き算をどこに使う予定なの?
具体的な使い道が浮かばんわw

87 名前:デフォルトの名無しさん mailto:sage [2013/01/29(火) 20:13:28.58 ]
うん、実用的な質問でないね

88 名前:デフォルトの名無しさん mailto:sage [2013/01/29(火) 23:28:38.52 ]
なんか当たり前のように言葉使ってるけど
文字列同士の引き算って元々何かのプログラミング言語とかにあるものなの?

89 名前:デフォルトの名無しさん mailto:sage [2013/01/29(火) 23:55:07.68 ]
pikeにあるよ

90 名前:デフォルトの名無しさん mailto:sage [2013/01/29(火) 23:58:00.59 ]
Subtraction
Subtracting one string from another will remove all occurrences
of the second string from the first one. So "foobarfoogazonk" - "foo" results in "bargazonk".

Pike Manual
fredrik.hubbe.net/pike/tutorial/tutorial_4.html#4.1.3

91 名前:デフォルトの名無しさん mailto:sage [2013/01/30(水) 00:24:02.84 ]
>>89,90
pikeか。名前は聞いた事あるけどしらなかったわ。
ありがとう。

92 名前:デフォルトの名無しさん mailto:sage [2013/01/30(水) 13:52:16.05 ]
PythonでGUIプログラミング始めようと思うんだけど
PyQtってどうなの?

93 名前:デフォルトの名無しさん mailto:sage [2013/01/30(水) 19:06:09.46 ]
どうなのって質問はないだろう。
聞きたいことを具体的に書けよ。



94 名前:デフォルトの名無しさん mailto:sage [2013/01/30(水) 19:30:30.04 ]
いいよ
でも PySide の方がいいってひともいるし
wxPython 最強ってひともいる

95 名前:デフォルトの名無しさん [2013/01/30(水) 22:01:01.66 ]
PySide の方が積極的にメンテされてる

96 名前:デフォルトの名無しさん mailto:sage [2013/01/30(水) 22:05:14.10 ]
PYQt は GPL だから、誰かに「PyQt を使ったプログラム」をコピーして渡すと
第三者にもソースを開示する義務を負うので
それが嫌な人には使えない

97 名前:デフォルトの名無しさん [2013/01/31(木) 05:33:36.79 ]
このひとまた変な本出してるな
ttp://www.amazon.co.jp/dp/4877832890/
このひとの他の本酷かったから買うつもり無いけど

98 名前:デフォルトの名無しさん mailto:sage [2013/01/31(木) 19:18:09.78 ]
すごいバカな質問かもしれませんが、許してください。
pythonのプログラム上でlispのプログラムを呼び出して使うってことはできないですよね?

99 名前:デフォルトの名無しさん mailto:sage [2013/01/31(木) 21:00:36.43 ]
>>98
lispプログラム起動するコマンド発行すればいいだけじゃね?

100 名前:デフォルトの名無しさん mailto:sage [2013/01/31(木) 21:03:12.05 ]
別プロセスとして呼び出すなら subprocess

101 名前:デフォルトの名無しさん mailto:sage [2013/01/31(木) 21:16:35.51 ]
Common Lispで動くCLPythonなんつーもんもあるらしい
ttp://common-lisp.net/project/clpython/

102 名前:デフォルトの名無しさん mailto:sage [2013/01/31(木) 21:43:42.35 ]
((Pythonで) 書く ((さらに良い) Lisp) インタプリタ)
www.aoky.net/articles/peter_norvig/lispy2.htm

103 名前:デフォルトの名無しさん mailto:sage [2013/01/31(木) 22:38:59.17 ]
すいません、
こういうリストを
a=[1,2,3,4,5]
こうしたいのですが、
a=['1','2','3','4','5']
どうしても
a= '[1,2,3,4,5]'
となってしまいます。
どうすれば
a=['1','2','3','4','5']
が得られるか教えてください。
よろしくお願いします。



104 名前:デフォルトの名無しさん mailto:sage [2013/01/31(木) 22:47:30.71 ]
[str(x) for x in a]

105 名前:デフォルトの名無しさん mailto:sage [2013/01/31(木) 22:49:38.24 ]
リスト内包表記でググれば詳しく書いてある

106 名前:デフォルトの名無しさん mailto:sage [2013/01/31(木) 22:59:33.23 ]
>>104
ありがとうございました!!

107 名前:デフォルトの名無しさん mailto:sage [2013/01/31(木) 23:19:00.57 ]
>>105
今、それを調べてました。やっと使い方がわかりました。ありがとうございます。

108 名前:デフォルトの名無しさん mailto:sage [2013/02/01(金) 01:58:54.76 ]
map(str, a)

109 名前:デフォルトの名無しさん mailto:sage [2013/02/01(金) 02:20:51.93 ]
ipythonの質問ですが、以下のようなfor文を履歴から再実行してみるとエラーになります。
何が問題なんでしょうか?

In [1]: for i in range(3) :
...: print i
...:
0
1
2

In [2]: for i in range(3) :
print i
------> print(i)
------------------------------------------------------------
IndentationError: expected an indented block (<ipython console>, line 2)


まったく同じ質問が以下のスレにあったのですが、スルーされていました。

Pythonのお勉強 Part35
www.logsoku.com/r/tech/1253535109/51

110 名前:デフォルトの名無しさん mailto:sage [2013/02/01(金) 03:13:40.59 ]
二行目のprint i のインデントが無くなってるのが原因
Pythonはブロックの中身が空だとエラーが出る

111 名前:デフォルトの名無しさん [2013/02/01(金) 07:32:39.48 ]
元気ですか〜
みなさんプログラミングがんばってますか〜
みんなのみんなのパイチンくんですよ〜

112 名前:デフォルトの名無しさん mailto:sage [2013/02/01(金) 10:00:33.92 ]
pass

113 名前:デフォルトの名無しさん [2013/02/01(金) 13:38:22.26 ]
99,100
できるのですね、ありがとうございます。



114 名前:デフォルトの名無しさん [2013/02/02(土) 00:08:57.65 ]
>>102 さんのリンクに感謝・感激です。

Emacs Lisp を使わねばならなくなり、といって今さら Lisp の勉強なんぞしたくないと
思っていました。

でも この記事(読んだのは lispy.htm ですが)を読むことで Lisp
のエッセンスを三時間で理解できたと思います。Lisp を好きになっちゃいました。

115 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 08:00:42.81 ]
Pythonで普通にopen(ファイル名,'w')して
文字列をwriteした時、使用される文字コードは
どこの設定で決まるのでしょうか。
WindowsXPのコマンドラインから実行する前提です。

116 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 08:01:00.84 ]
list =[0, 1, 2, 3, 4, 5]
として
list[4]=0
とすると
list=[0, 1, 2, 3, 0, 5]
とリスト内の要素を指定出来ますが、
逆に4以外を操作したいって場合はうまい書き方はありませんか?
つまり、「hogehogeでない要素」という否定の要素の指定をお願いします。

117 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 08:37:38.27 ]
これぐらいじゃない?

>>> L = [0, 1, 2, 3, 4, 5]
>>> L1 = []
>>> for i in range(len(L)):
... if L[i] != 4:
... L1.append(None)
... else:
... L1.append(L[i])
...
>>> L1
[None, None, None, None, 4, None]

118 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 08:52:58.99 ]
>116
f = lambda e: 9 if e != 4 else 4
L = [ 3, 8, 4, 0, 7 ]
R = [ f(e) for e in L ]
print R

119 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 10:17:56.45 ]
Python 2.x なら、
普通にopen(ファイル名,'w')して文字列をwriteした時、
使用される文字コードはソースファイルのエンコードで決まる。

# -*- coding: utf-8 -*-
として、
open('hoge.txt', 'w').write('あいう')
ならutf-8で書かれるし、
open('hoge.txt', 'w').write('あいう'.decode('utf-8').encode('cp932'))
ならcp932で書かれる。

codecs使わない限りバイナリには影響与えない。

120 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 10:19:33.26 ]
ああ、'ファイル名'の方の文字コードの話なら、
ちょっと注意が必要。
argvに入ってくる文字列のエンコードとかあるし。

121 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 11:43:34.91 ]
>>118
いや、4って要素じゃなくて添字のことでしょ
>>> L = [0, 1, 2, 3, 4, 5]
>>> L = [0 if i!=4 else j for i,j in enumerate(L)]
>>> L
[0, 0, 0, 0, 4, 0]

122 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 12:04:34.89 ]
> つまり、「hogehogeでない要素」という否定の要素の指定をお願いします。
                 ^^^^         ^^^^

123 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 12:09:57.83 ]
>>122
L[4]=0
で4という要素にはアクセスできない。質問者が言葉を間違えてるだけ



124 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 12:22:18.22 ]
>>116
l = [0,1,2,3,4,5]
t = l.pop(4)
for i in range(len(l)):
  l[i] = 2
l[4:1] = [t]
print l

[2, 2, 2, 2, 4, 2]

125 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 12:53:26.99 ]
import numpy as np
l = np.array([0,1,2,3,4,5])
for i in np.argwhere(l!=4):
 l[i] = 99
print l

126 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 12:56:58.25 ]
arrayはリストとして使うときはキャストしなきゃいけないし
用途に合ってないのに使うのは微妙

127 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 13:00:42.80 ]
しかも、また要素で判定してて笑える

128 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 13:13:49.23 ]
添え字対応だとこうだけど。
>>> L = [0, 1, 2, 3, 4, 5]
>>> L2 = []
>>> for i in range(len(L)):
... if i != 4:
... L2.append(None)
... else:
... L2.append(L[i])
...
>>> L2
[None, None, None, None, 4, None]

LをL3として、
L3 = [100, 101, 102, 103, 104, 105]
とした時に、どういう事をしたくてどういう結果が欲しかったのか、
質問し直してくれない?>>116

129 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 13:17:05.54 ]
添字 [0 if i!=4 else j for i,j in enumerate(L)]
要素 [0 if i!=4 else i for i in L]

これだけの話

130 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 13:27:52.84 ]
これでよくね
l = [0,1,2,3,4,5]
t = range(len(l))
t.pop(4)
for i in t:
 l[i] = 0

131 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 13:41:23.65 ]
>>117>>128
なんでリスト内包表記を使わないの?

>リストに要素を append() する場合、インタプリタは「リストから append 属性を
>取り出してそれを関数として呼び出す」という処理をしなければなりません。
> それに対して、リスト内包表記を使うと、インタプリタに直接「リストに要素を
>追加する」という処理をさせることができます。インタプリタが解釈する命令数
>が減る、属性の取り出しが不要になる、関数呼び出しが不要になる、という3つ
>の理由で、リスト内包表記を使うと速くなります。
dsas.blog.klab.org/archives/51742727.html

132 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 13:55:47.45 ]
そもそも、質問者は L[4]=0 と逆の操作をやりたいのだから
for i in range(len(L)): ~ でやるなら代入とスキップでいいだろ
なんで新たにリストを作って毎度関数を呼び出すのか

133 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 14:09:36.49 ]
>>131
1つ目、内包表記の中で条件分岐とか分かりづらいと思った。
2つ目、質問者>>116の質問内容からして、内包表記は難しいと思った。

以下のように各要素を100倍するだけなら内包表記を説明したかも。
>>> L4 = [x * 100 for x in L]
>>> L4
[0, 100, 200, 300, 400, 500]
>>> ML5 = map(lambda x: x * 100, L)
>>> ML5
<map object at 0xb70f766c>
>>> tuple(ML5)
(0, 100, 200, 300, 400, 500)
>>> tuple(ML5)
()

3つ目、実行速度とか効率とかよりも以前の問題で>>116は躓いてるでしょ。
質問者がどこで躓いているのか把握した上で答えようよ。

> 逆に4以外を操作したいって場合はうまい書き方はありませんか?
>つまり、「hogehogeでない要素」という否定の要素の指定をお願いします。
って聞いてきた人に「内容表記ってのがあってー」とかって言うと、
質問者は混乱すると思うよ。頭の悪い回答者だと思う。



134 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 14:22:07.62 ]
>>133
内包表記というのがあってーじゃなくて
こういうときはこうすると覚えればいいだけ

それにリスト内包表記や三項演算子のネストは止めた方が良いが
今回それぞれ一個だからわかりづらくはない
pythonのリスト内包表記や三項演算子はfor文やif文と直交性があるから
mapやfilterやlambdaを組み合わせるより遥かに直感的に書ける

まるでC言語のようなコードをPythonで書くのは馬鹿らしいことだよ
Pythonではどう書くのか覚えて慣れたほうがいい

135 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 14:59:20.33 ]
今回みたいなのは無理に答えないで
質問のどこが悪いのか指摘したうえで再提出要求でいいよ
でないとプログラマがするような質問の仕方が身につかない

136 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 15:16:12.99 ]
だから、>>128の下から4行ってことでしょ?

137 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 15:38:55.89 ]
いまいち「直交性」の意味が分からない

138 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 15:50:04.55 ]
独立している、無関係である、お互いの領分が重ならない、
という時に使う言葉ではあるが

139 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 15:54:57.27 ]
シンタックスで言えば、同じような操作で、同じような結果が得られるときに使う言葉だよ

140 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 17:10:03.62 ]
「直交性」ていわれると、目が点になるね

141 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 17:14:15.13 ]
> What does Python have that PHP doesn't?
> - very clear, concise, and orthogonal syntax
PythonにあってPHPにないものは?
・簡潔明瞭で、直交性の高いシンタックス
wiki.python.org/moin/PythonVsPhp (公式)

> its syntax and toolset are remarkably coherent. Moreover,like math, its design is orthogonal
books.google.co.jp/books?id=nEJ-jcYF2fMC&pg=PA16&lpg=PA16&dq=orthogonal#v=onepage&q=orthogonal&f=false (オライリー)

142 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 17:18:11.31 ]
元の意味は>>138だろ?そういう文脈では分かるんだけど
応用的な使い方されると、もう分からない。
>>139とかほとんど真逆の事言われてるような気すらする…

143 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 17:18:32.04 ]
直行って相反するイメージがあるんだけど、
なんで直行性でそういう意味になるんだろう



144 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 17:21:47.72 ]
数学で直交性と言えば線形独立性の事であって
いかにベクトルが同じ方向を向かないかを意味するのに、
同じ方法で同じ結果が得られるという意味に使おうという
ガイジンの発想がよく分からん

145 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 17:38:59.87 ]
ある命令で、その意図以外のことが起こらないことを直交と言って
for はイテラブル・オブジェクトを辿るし、if は条件を判定するってだけ
これで条件演算子が e1 ? e2:e3 だったらシンタックスのコンパクトさが損なわれる

全部個人的な評価だけど

146 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 17:55:03.33 ]
forにelse節があるのが直交ねえ

147 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 18:08:08.99 ]
リスト内包表記に内包されるのはfor節とif節であってfor文ではない
あとfor文やwhile文のelse節を使ったコードは寡聞にして見たことがない

148 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 18:41:17.44 ]

X = mx
Y = my
こうなってたら、Xは、xによるが、yによらない。

149 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 18:43:22.60 ]
Pythonが「誰が書いても同じようなコードになる」と謳われるのは、
ある処理を実現する複数の従属な記述がないから。

本当はいくらでも違う書き方が出来るけど、まあ独立性についてはそんな感じ。でも一貫性と言ったほうが分かりやすい。

150 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 18:47:47.14 ]
いや、従属な処理を実現する複数の記述がないから。か

151 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 19:40:22.93 ]
>>138,142だが
長々とスレ違いな話題ですまん。

皆の意見参考にして自分なりに考えてみた。
こういう解釈でいいんだろうか?

直交性が高いシンタックス
= シンタックスと文脈の直交性が高い
(キーワードが文脈と独立して解釈出来る)
= どんな文脈でも forはiteration、ifは条件分岐を意味する
かつ、iteration、条件分岐を意味する他のキーワードはない
= >>134、138 の意味

152 名前:151 mailto:sage [2013/02/02(土) 19:43:29.43 ]
ごめん、アンカ間違った。
俺は>>137,142だ

で最後の行は
>>134,139

153 名前:116 mailto:sage [2013/02/02(土) 21:33:57.37 ]
添え字とリスト内の要素と紛らわしい質問をして大変申し訳ありませんでした。
そして、丁寧に回答してくださった方々ありがとうございました。
添え字で否定の指定したかったのですが、ここまで大変参考になりました。
リスト内包表記は視覚的にもとても見やすいので使いこなせるよう頑張ります。



154 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 21:45:23.81 ]
こうやってまた一人、蛇の道を歩み始めたのであった。

155 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 23:07:18.96 ]
>>142
>>139 の説明が悪いんだろ。

(異なる対象に対して、)

同じような操作で、同じような結果が得られるとき

(は、対象と操作の直交性が高い (つまり、対象と操作の独立性が高い))

>>145 とかは、俺も意味がわからん。
直交って言ってるんだから、○○と△△ のようにベクトルは2つ必要だと思うが。

156 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 23:16:59.40 ]
>>155
ベクトルは一切関係ないです。一切。

157 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 23:19:24.88 ]
numpyのndarrayを複数の変数に同時に代入できませんか?

img = cv2.imread("hoge.jpg", 1)
b = g = r = img.copy()

OpenCVで画像を読み込んだのでimgの中身はnumpyの3次元arrayなのですが
これを普通の文字列や数値と同じノリで代入してもr,g,bそれぞれ全部0のarrayが代入されてしまいます。
もちろんそれぞれ別箇に代入すれば解決しましたけど、なるべく同時に代入するよう記述したいです。
うまい記述方法はありませんか?

158 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 23:24:20.22 ]
r, g, b = [1, 2, 3]

159 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 23:39:51.06 ]
>>157
まずもって全て0の配列が代入される意味は分からんが、それ以前に
そんなことしたら r, g, b は全部同じオブジェクトを指すことになるのだが、それで良いのか
つまり r の要素を変更したら g, b も同じく変更される

160 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 23:45:58.12 ]
それぞれが img のコピーということなら、こうだけど
b, c, d = [img.copy() for i in range(3)]

161 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 23:46:34.26 ]
>>159
やはりそれが問題なのでしょうか?
すべて値渡しにするためには
b, g, r = img.copy(), img.copy(), img.copy()
しかないのでしょうか?
レスありがとうございました。

162 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 23:51:50.12 ]
>>160
ありがとうございます
これでちゃんと通りました
リスト内包表記は便利ですね

163 名前:デフォルトの名無しさん mailto:sage [2013/02/03(日) 23:44:01.29 ]
配列が大きすぎて、メモリが足りないという以下のようなエラーが出ます。
ValueError: array is too big.

これにうまく対処する方法はありますか?
(メモリでなく一時的にHDDに書き出しながら計算するとか?)

たとえば、以下のような計算をしたいです。

import numpy as np
N=1000000
A = np.random.rand(N,N)
B = np.random.rand(N,N)
C = np.tensordot(A,B,([1,0],[0,1]))
print C



164 名前:デフォルトの名無しさん mailto:sage [2013/02/04(月) 00:08:24.04 ]
こええ!

165 名前:デフォルトの名無しさん mailto:sage [2013/02/04(月) 00:17:05.17 ]
実際になにをやりたいかによるけど
A,Bをジェネレータにできないようなら
変に工夫するよりmmapつかって富豪プログラミングするかな。
numpy.memmapとか。

166 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 00:53:58.19 ]
多重起動防止でこのサイトのMutexを使った方法をやろうと思ったのですが
www.ops.dti.ne.jp/ironpython.beginner/multithread3.html
mutex モジュールは Python 3.0 で削除されました。 との事でした。
docs.python.jp/3/library/mutex.html

Python 3で多重起動防止をやるにはどうしたらよいでしょうか

167 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 06:29:12.53 ]
排他制御ってことですよね この辺は参考にならないでしょうか
d.hatena.ne.jp/yatt/20100107/1262869979
www.phactory.jp/cms/blog/post/admin/2010/02/python_lock/

168 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 16:08:39.88 ]
プロセス間の排他制御が必要なので、標準ライブラリのthreadingやmutexは、その用途には使えないと思う。

排他制御の実現方法は幾つかあるけど、多分、各環境毎に実装方法が異なるので
Pythonで〜というより、環境が提供してる方法を調べた方がいいかもしれない。
(例えば、wxだったらwx.SingleInstanceChecker みたいなのが用意されてたりする)

169 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 16:32:33.17 ]
その手はあんま移植性高くないんだよな

flock()がなぜか無駄に有名だけど、flock()はPosix標準ですらないので
少なくともPosix標準で定義されていて高機能なfcntl系のlockf()を使った方がいいよ

あと紛らわしいのがmutexってPosix系とWindowsで意味が違っていて
pthreadだとスレッド同期オブジェクトだがWindowsではプロセス間排他に使える
グローバルなカーネルオブジェクト
なのでWindowsならばmutexを使うのはこの場合一つの妥当な解だけど
ctypesとかwin32専用のモジュールを使う必要があるはず

170 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 16:35:22.63 ]
ついでに調べてみた、
multiprocessingの方のSemaphoreは、内部で名前付きセマフォを使ってるんだけど、
引数で名前を指定する方法がないので、惜しいけど、多重起動防止には使えない。

ちなみに、ロック・ファイル方式は、システムがクラッシュした時、
ロックが残ってしまった場合を考慮すると運用面で難有りです。

171 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 16:49:07.46 ]
>>166
pypi.python.org/pypi/justme/
Prohibit to run two process/instance at same time.
to use a transaction behavior via sqlite3.

頑張って作ってみたよ。どうぞ。

172 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 20:29:37.92 ]
こんなにわかりやすい自演に遭遇したのは久しぶりだ

173 名前:デフォルトの名無しさん [2013/02/06(水) 00:15:59.16 ]
デスクトップに置いた、メモ帳で作成した英文テキストファイルを
f = open(ファイルパス、r、UTF-8)で読み込ませたかったんですが、
'unicodeescape' codec can't decode 〜
というエラーが出てしまい読み込みません。どうしたらいいのでしょうか?



174 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 00:37:22.92 ]
>173
たぶんコレだろ
ttp://stackoverflow.com/questions/1347791/unicode-error-unicodeescape-codec-cant-decode-bytes-cannot-open-text-file

175 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 00:41:41.81 ]
>>173
まずは、環境を明記し実際のコードとエラーメッセージを省略せずに貼り付けて

よくあるケースだと、メモ帳でutf-8のファイル作るとBOMが付くのが原因
Pythonで BOM付き utf8 読むときは "utf8-sig" を指定する。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<228KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef