5

我想知道是否有一种方法可以将许多不同数组中的数据引用到一个数组,但不复制它。

例子:

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是一个新数组,因此如果您修改aor的某些元素b,则根本不会修改它c

我希望c(即c[0],c[1]等)的每个索引都引用aand的每个元素b,但就像一个指针,而不是deepcopy数据。

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 数组必须由可以定期跨步的连续内存块支持,以便将内存地址映射到各个数组元素。

在您的示例中,a并且b将在不相邻的内存块中分配,因此无法使用一组步幅来处理它们的元素。

于 2015-04-21T14:42:06.173 回答