5

多くの異なる配列から1つの配列にデータを参照する方法があるかどうか疑問に思っていましたが、それをコピーすることはありませんでした。

例:

import numpy as np
a = np.array([2,3,4,5,6])
b = np.array([5,6,7,8])

c = np.ndarray([len(a)+len(b)])

offset = 0
c[offset:offset+len(a)] = a
offset += len(a)
c[offset:offset+len(b)] = b

ただし、上記の例でcは、 は新しい配列であるため、aまたはの一部の要素を変更してもb、 ではまったく変更されませんc

c(つまりc[0]、など)の各インデックスがとc[1]の両方の各要素を参照することを望みますが、ポインタのように、データの を作成しません。abdeepcopy

4

1 に答える 1

4

@Jaimeが言うように、内容が複数の既存の配列の要素を指す新しい配列を生成することはできませんが、反対のことはできます:

import numpy as np

c = np.arange(2, 9)
a = c[:5]
b = c[3:]
print(a, b, c)
# (array([2, 3, 4, 5, 6]), array([5, 6, 7, 8]), array([2, 3, 4, 5, 6, 7, 8]))

b[0] = -1

print(c,)
# (array([ 2,  3,  4, -1,  6,  7,  8]),)

あなたが求めているものの根本的な問題は、メモリアドレスを個々の配列要素にマップするために定期的にストライドできるメモリの連続ブロックによって、numpy 配列をサポートする必要があることだと思います。

あなたの例でab、メモリの隣接しないブロック内に割り当てられるため、ストライドの単一セットを使用してそれらの要素をアドレス指定する方法はありません。

于 2015-04-21T14:42:06.173 に答える