アレイの任意の列を減算

Subtract a column vector from matrix at specified vector of columns using only broadcast – StackOverflow

指定したindicesに基づいて計算したい場合,
任意のnumpy.ndarrayから指定されたインデックスに基づいて加減算したい場合,
「numpy.ufunc.at」を用いる事ができる.これはinplaceな処理.

import numpy as np


M = np.array([[  1,   2,   1,   1],
           [  2,   1,   1,   1],
           [  1,   1,   2,   1],
           [  2,   1,   1,   1],
           [  1,   1,   1,   2]])  # An example matrix

V = np.array([1, 1, 1, 1, 1]) # An example column vector

I = np.array([0, 3, 2, 3, 1, 3, 3]) # The index maxtrix

np.subtract.at(M.T,I,V)
M
array([[ 0,  1,  0, -3],
       [ 1,  0,  0, -3],
       [ 0,  0,  1, -3],
       [ 1,  0,  0, -3],
       [ 0,  0,  0, -2]])

回答でへえ,と思ったのは,numpy.bincountを用いた方法.

M = np.array([[  1,   2,   1,   1],
           [  2,   1,   1,   1],
           [  1,   1,   2,   1],
           [  2,   1,   1,   1],
           [  1,   1,   1,   2]])  # An example matrix

V = np.array([1, 1, 1, 1, 1]) # An example column vector

I = np.array([0, 3, 2, 3, 1, 3, 3]) # The index maxtrix
M - np.outer(V, np.bincount(I, None, M.shape[1]))
array([[ 0,  1,  0, -3],
       [ 1,  0,  0, -3],
       [ 0,  0,  1, -3],
       [ 1,  0,  0, -3],
       [ 0,  0,  0, -2]])

みればなる程.でも,自分では思い付かないなと.

広告
カテゴリー: 未分類 パーマリンク

アレイの任意の列を減算 への1件のフィードバック

  1. ピンバック: 2D Numpy配列で最初の要素が重複している行の平均 – 2Dなnumpy.ndarrayの最初の要素(1列目)で各行をグルーピングして集計(平均を算出) | 粉末@それは風のように (日記)

コメントを残す

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

WordPress.com ロゴ

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

Google フォト

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

Twitter 画像

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

Facebook の写真

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

%s と連携中

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