ベクトル形式の配列(1Dアレイ)を正方形の配列(行列)に変換

list to matrix conversion with numpy – StackOverflow

scipy.spatial.distance.squareform – scipy-0.14.0

がリーズナブルチョイス.

import numpy as np
from scipy.spatial import distance


def Divakar_func(register, dim):
  arr = np.zeros((dim, dim), dtype=int)
  r = np.arange(dim)
  mask = r[:, None] < r
  arr[mask] = register
  arr.T[mask] = register
  return arr


def coldspeed_func(register, dim):
  idx = np.triu_indices(dim, k=1)
  arr = np.zeros((dim, dim))
  arr[idx] = register
  arr.T[idx] = register
  return arr


dim = 5000
register = np.random.randint(0, 10, dim*(dim-1)//2)

assert np.allclose(Divakar_func(register, dim), coldspeed_func(register, dim))
%timeit Divakar_func(register, dim)
%timeit coldspeed_func(register, dim)

assert np.allclose(Divakar_func(register, dim), distance.squareform(register))
%timeit distance.squareform(register)
1 loop, best of 3: 307 ms per loop
1 loop, best of 3: 667 ms per loop
1 loop, best of 3: 236 ms per loop
カテゴリー: 未分類 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください