質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.39%

  • Python 3.x

    2383questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

map関数内でのSyntaxError

解決済

回答 1

投稿 2017/11/24 14:26

  • 評価
  • クリップ 0
  • VIEW 49

ruuruusann24

score 3

ここでshow_volonoi_with_metricsのなかで
cluster_points = map(lambda (p, label): p, filter(lambda (p, label): label == i, labeled_mesh_points)
SyntaxError: invalid syntax
というエラーが出てしまいます。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
%matplotlib inline

def label_cluster_num(means, mesh_points, metrics):
def label(point):
cluster_label = np.argmin(map(lambda mean: metrics(mean, point), means))
return point, cluster_label
return map(label, mesh_points)

c_means = np.array([[1, 2], [-3, 4], [-5, -6], [7, -8]])
xs = np.linspace(-10, 10, 100)
ys = np.linspace(-10, 10, 100)
xx, yy = np.meshgrid(xs, ys)
mesh_points = np.c_[xx.ravel(), yy.ravel()]

def show_volonoi_with_metrics(metrics):
labeled_mesh_points = label_cluster_num(c_means, mesh_points, metrics=metrics)
plt.figure()
fig, ax = plt.subplots()

ax.set_aspect('equal')
ax.grid(True, which='both')
ax.axhline(y=0, color='k')
ax.axvline(x=0, color='k')
ax.set_xlim([-10, 10])
ax.set_ylim([-10, 10])

for i in range(0, len(c_means)):
cluster_points = map(lambda (p, label): p, filter(lambda (p, label): label == i, labeled_mesh_points)
xs = map(lambda p: p[0], cluster_points)
ys = map(lambda p: p[1], cluster_points)
ax.scatter(xs, ys, color=cm.prism(i / float(len(c_means))), marker='.')

ax.scatter(map(lambda p: p[0], c_means), map(lambda p: p[1], c_means), color="g", marker='o')

plt.show()

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

ラムダ式の引数にカッコはいらないです。

>>> (lambda (a, b): a)
  File "<stdin>", line 1
    (lambda (a, b): a)
            ^
SyntaxError: invalid syntax
>>> (lambda a, b: a)
<function <lambda> at 0x0000024AAFDB3E18>

なお、未確認ですが、ジェネレータ内包表記でも同等の記述ができるかと思います。

cluster_points = (p for p, label in labeled_mesh_points if label == i)

質問の仕方について

teratailには、上記のようにコードを見やすく表示する機能があります。
質問編集画面を開き、コードを選択した状態で<code>ボタンを押してください。
特にPythonの場合、インデントが崩れるとコードの意味が変わってしまいます。

投稿 2017/11/24 14:31

編集 2017/11/24 14:46

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/24 14:53

    エラーが解決しました。丁寧に説明していただきありがとうございます

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.39%

関連した質問

同じタグがついた質問を見る

  • Python 3.x

    2383questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。