k-means はラベルのないデータからグループを見つけます。与えられた重心から始めて、iterations 回繰り返します。
- 割り当て:各点を、最も近い重心(ユークリッド距離)のクラスタに入れます。2つの重心が同じ距離なら、インデックスが小さい方を選びます。
- 更新:各重心を、割り当てられた点の平均に移動します。点が1つもない重心はそのままです。
k_means(points, centroids, iterations) を実装してください。
入力
points: データ点。各点は座標のリストです。
centroids: k 個の初期重心。座標の数は点と同じです。
iterations: 割り当てと更新を何回行うか。
出力
最終的な重心を元の順序で返してください。
制約
1 ≤ 点の数 ≤ 1,000、1 ≤ k ≤ 20、1 ≤ 次元数 ≤ 10
0 ≤ iterations ≤ 100
-1,000 ≤ 各座標 ≤ 1,000
例
入力:
points = [
[1.0, 1.0],
[1.5, 2.0],
[8.0, 8.0],
[9.0, 8.5]
]
centroids = [
[0.0, 0.0],
[10.0, 10.0]
]
iterations = 1
期待される出力:
[
[1.25, 1.5],
[8.5, 8.25]
]
解説
最初の2点は (0, 0) に近く、最後の2点は (10, 10) に近いです。新しい重心はそれぞれの平均で、((1 + 1.5) / 2, (1 + 2) / 2) = (1.25, 1.5) と ((8 + 9) / 2, (8 + 8.5) / 2) = (8.5, 8.25) です。
入力:
points = [
[0.0],
[1.0],
[10.0]
]
centroids = [
[0.0],
[100.0]
]
iterations = 2
期待される出力:
[
[3.666667],
[100.0]
]
解説
1回目:(100) はどの点からも遠いので、3点すべてが重心1に入り、重心1は (0 + 1 + 10) / 3 ≈ 3.666667 に移動します。重心2には点がないので 100 のままです。2回目も同じ割り当てになるので、結果は [[3.666667], [100]] です。
参考資料
-
例 1 未実行入力:
points = [ [1.0, 1.0], [1.5, 2.0], [8.0, 8.0], [9.0, 8.5] ] centroids = [ [0.0, 0.0], [10.0, 10.0] ] iterations = 1期待される出力:[ [1.25, 1.5], [8.5, 8.25] ]あなたの出力 -
例 2 未実行入力:
points = [ [0.0], [1.0], [10.0] ] centroids = [ [0.0], [100.0] ] iterations = 2期待される出力:[ [3.666667], [100.0] ]あなたの出力
提出時に非公開テスト4件も実行されます。
Pythonオンラインコンパイラ&デバッガー
Pythonコードをオンラインで実行・デバッグできます。サーバーモードでブレークポイントとステップ実行を使え、インストールは不要です。
🐍 このPythonオンライン実行環境について
CodeUtility Python Executor は、ブラウザ上でPythonコードを記述・実行・テストできるツールです — セットアップやインストールは不要です。安全なサンドボックス上で動作し、 3.10 から 3.13 までの実際のPythonバージョンをサポートします。
初めてPythonを学ぶ場合でも、ちょっとしたスニペットを試すときでも、ロジックをデバッグするときでも、 このツールは高速で集中できるコーディング環境を提供します。 内蔵コンソールで自由に試し、結果をすぐに確認できます。
Pythonの練習や素早いプロトタイピングのために軽量なオンラインIDEが必要な、初心者、学生、開発者に最適です。
同じ実行環境で、複数ファイル対応エディター、分離された実行ターミナル、ランタイム別ライブラリ、永続ワークスペース、共有、リアルタイム共同作業を利用できます。
この実行環境の使い方
ランタイムを選択し、ファイルを開くか作成してコードを記述し、[実行]を選択します。出力はターミナルに表示されます。サインインしたユーザーは、ワークスペースにファイルを保存し、ライブラリをインストールして、共有を通じて共同作業できます。
- バージョンを選択して現在のファイルを編集するか、ワークスペース内の別のファイルを開きます。
- コードを実行し、求められた場合はターミナルに入力して、保存された実行履歴を確認します。
- 複数のコードスニペットが必要な作業では、ライブラリ、ワークスペースツール、共有、チャットを利用します。
💡 上のエディタで試せるPythonの基礎とサンプル
1. 変数と定数の宣言
Pythonは動的型付けなので、型を明示的に宣言する必要はありません。組み込みの定数キーワードはありませんが、慣例として定数はすべて大文字で書きます。
# 変数
x = 10
pi = 3.14
name = "Alice"
is_active = True
# 定数(慣例)
MAX_USERS = 100
APP_NAME = "CodeUtility"
# 定数も再代入は可能(強制されない)
MAX_USERS = 200 # ⚠️ 技術的には可能だが非推奨
2. 条件分岐
if、elif、else ブロックでロジックを制御します。Python 3.10以降では、match-case をswitch-caseの代替として使えます。
# 従来の if-elif-else
x = 2
if x == 1:
print("一")
elif x == 2:
print("二")
else:
print("その他")
別案: match-case(Python 3.10+)
# Python 3.10+ が必要
x = 2
match x:
case 1:
print("一")
case 2:
print("二")
case _:
print("その他")
3. ループ
for はシーケンスの反復に使い、while は条件が真の間実行されます。
for i in range(3):
print(i)
count = 3
while count > 0:
print(count)
count -= 1
4. リスト
リストは順序を持つ可変のコレクションです。インデックスで要素にアクセスできます。
fruits = ["りんご", "バナナ"]
print(fruits[0])
print(len(fruits))
5. リストの操作
リストの追加・削除・スライス・反転ができます。内包表記を使うと簡潔に反復処理を書けます。
fruits.append("さくらんぼ")
fruits.insert(1, "キウイ")
fruits.remove("バナナ")
fruits.pop()
print(fruits[1:3])
print(fruits[::-1])
squares = [x*x for x in range(5)]
6. コンソール入出力
input() でユーザーから読み取り、print() で出力を表示します。
\n(改行文字)を使うか、print() を複数回呼び出すことで複数行を表示できます。
# 入力を読む
name = input("あなたの名前を入力してください: ")
print("こんにちは", name)
# 複数行を出力
print("1行目\n2行目\n3行目")
# あるいは print を複数回使う
print("A行")
print("B行")
print("C行")
7. 関数
関数はコードを整理し、再利用を可能にします。引数や戻り値を使いましょう。
def greet(name):
return "こんにちは " + name
print(greet("Alice"))
8. 辞書
キーと値のペアを保持します。キーは一意で、キーを使って値にアクセスします。
person = {"name": "Bob", "age": 25}
print(person["name"])
print(person.get("email", "未設定"))
9. 例外処理
try と except でエラーを捕捉し、適切に処理します。
try:
x = 1 / 0
except ZeroDivisionError:
print("0で割ることはできません")
10. ファイル入出力
open() を使ってファイルの読み書きを行います。
with open("data.txt", "w") as f:
f.write("こんにちは、世界")
with open("data.txt", "r") as f:
print(f.read())
11. 文字列操作
Pythonの文字列には、strip()、replace()、split() など強力なメソッドがあります。
text = " Hello World "
print(text.strip())
print(text.upper())
print(text.replace("Hello", "Hi"))
print(text.split())
12. クラスとオブジェクト
クラスで再利用可能な設計図を定義します。オブジェクトの初期化には __init__ を使います。
class Person:
def __init__(self, name):
self.name = name
def greet(self):
return "こんにちは、私は " + self.name
p = Person("Alice")
print(p.greet())
🐞 Pythonコードをオンラインでデバッグする方法
オンラインPythonデバッガーなら、PythonやIDEをインストールせずにロジックエラーを調査できます。サーバーモードでPython 3.10〜3.13を使用します。
- ランタイムメニューからサーバー版Pythonを選択します。
- 行番号の横をクリックしてブレークポイントを設定します。
- Debugを選択し、最初に一致するブレークポイントまで実行します。
- 現在行と変数を確認し、Continue、Step Over、Step Into、Step Outを使います。
- 終了するときはStopを選択します。
再現可能な小さなコードから始め、値が想定外になる直前にブレークポイントを置きましょう。サーバーモードではworkspaceのファイルやインストール済みライブラリも使えます。