0

簡単に言えば...ここに問題があります:

import numpy as np
a = np.array([ 0, 1, 2, 3, 4, 5, 6, 100, 8, 9])
np.where(a==100, -1, a[a])

私が得ることを期待しているのは: 0, 1, 2, 3, 4, 5, 6, -1, 8, 9 代わりに私は得ています:index 100 out of bounds 0<=index<10

インデックスが無効であることは認めますが、[100] ではなく -1 を評価する必要があります... numpy.where() コマンド構造を理解している限り。

この例で私が間違っていることは何ですか?

ここで実際に何をしようとしているのかを明確にするために、より詳細なコードを示します。これは、ルックアップ テーブル配列の再マッピング手順です。

import numpy as np

# gamma-ed look-up table array
lut = np.power(np.linspace(0, 1, 32), 1/2.44)*255.0

def gamma(x):
    ln = (len(lut)-1)
    idx = np.uint8(x*ln)
    frac = x*ln - idx
    return np.where( frac == 0.0,
                    lut[idx],
                    lut[idx]+(lut[idx+1]-lut[idx])*frac)

# some linear values array to remap
lin = np.linspace(0, 1, 64)

# final look-up remap
gamma_lin = gamma(lin)
4

3 に答える 3

2

関数の引数として指定した式は、関数に渡される前に評価されます (ドキュメント リンク)。したがって、式が呼び出されるa[a]前であっても、式からインデックス エラーが発生します。np.where

于 2012-10-25T09:33:18.147 に答える
1

以下を使用してください。

np.where(a==100, -1, a)

ドキュメントに記載されているように:

numpy.where(condition[, x, y])

Return elements, either from x or y, depending on condition.
If only condition is given, return condition.nonzero().

ここに、a==100条件-1、条件が満たされたときに取得する必要のある値(True)、aフォールバックする値があります。


IndexErrorが発生する理由は、a[a]:配列自体にインデックスを付けているためです。これは、要素が100未満であるために失敗aする:と同等です。a[[0,1,2,3,4,5,6,100,8,9]]a


別のアプローチは次のとおりです。

a_copy = a.copy()
a_copy[a==100] = -1

(その場で変更したい場合は、に置き換えa_copyてください)a

于 2012-10-25T08:48:56.340 に答える
0

書き込むときa[a]に、インデックス 0,1,2...100... を取得しようとするaため、インデックスが範囲外エラーになります。代わりに書く必要がありますnp.where(a==100, -1, a)-それはあなたが探している結果を生み出すと思います.

于 2012-10-25T08:56:49.347 に答える