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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

Q&A

解決済

1回答

445閲覧

map関数内でのSyntaxError

ruuruusann24

総合スコア16

Python 3.x

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

0グッド

0クリップ

投稿2017/11/24 05:26

ここで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()

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

Python

1>>> (lambda (a, b): a) 2 File "<stdin>", line 1 3 (lambda (a, b): a) 4 ^ 5SyntaxError: invalid syntax 6>>> (lambda a, b: a) 7<function <lambda> at 0x0000024AAFDB3E18>

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

Python

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

質問の仕方について

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

投稿2017/11/24 05:31

編集2017/11/24 05:46
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ruuruusann24

2017/11/24 05:53

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問