1

これは、私が期待するものとは異なる答えを私に与えているコードのセクションです。行:print list(x)私が期待することを行います。行: は配列内のその要素の値を返すことを期待しprint random_array[list(x)]ますが、3 つの配列を返します。たとえばlist(x)返品の[9, 8, 7]場合random_array[9, :, :], random_array[8, :, :], random_array[7, :, :]は、印刷されます。誰かが私にこれがなぜなのか説明してもらえますか? そして、どうすれば期待される答えを得ることができますか?

import numpy as np
import itertools

random_array = np.random.randint(0, 9, (10, 10, 10))
my_iterator = itertools.product(range(10),range(10),range(10))

for x in my_iterator:
    print list(x)
    print random_array[list(x)]
4

4 に答える 4

3

タプルではなくリストを渡しています:

# What you are doing
random_array[[2, 3, 3]]  # semantics: [arr[2], arr[3], arr[3]]

# What you want to be doing
random_array[(2, 3, 3)]  # semantics: arr[2][3][3], same as arr[2,3,3]

要するに: を使用してタプルをリストにキャストしないでくださいlist(...)

于 2012-02-24T14:38:50.020 に答える
1

あなたが望むのは次のとおりだと思います:

print random_array[x[0], x[1], x[2]]

リストをインデックスとして numpy に渡すと、インデックス リストを反復処理し、その要素のスライスを取得します。例えば:

>>> test = numpy.array(range(10))
>>> idx = [1, 2, 3]
>>> test[idx]
array([1, 2, 3])
于 2012-02-24T14:39:10.863 に答える
1

どうですか

print random_array[x]

リストを渡すと、高度なインデックス作成が行われますが、これは望ましくありません。

于 2012-02-24T14:46:45.063 に答える
0

あなたは言う:

次の行が期待されます: print random_array[list[x]) は、配列内のその要素の値を返します

しかし、あなたのコードにはそのような行は含まれていません。これがあなたの問題の原因だと思います。

于 2012-02-24T14:32:34.997 に答える