numpy数组

时间:2016-12-18 20:41:52

标签: python arrays numpy

以下示例对我来说很奇怪。数组ac不同,但在修改a的第一个元素时,c的第一个元素也会发生变化。为什么numpy数组是这样实现的?如果将a指定为列表,则更改a的第一个元素不会更改c的第一个元素。我想不出任何需要numpy数组行为的例子。

import numpy as np

a = np.arange(3,5)
#a = [3, 4]
b = a
c = a[:]
d = a.copy()

print(a is b) # True
print(a is c) # False
print(a is d) # False

print(a, b, c, d) #[3 4] [3 4] [3 4] [3 4]

a[0] = -11.

print(a, b, c, d) #[-11   4] [-11   4] [-11   4] [3 4] HUH?!

1 个答案:

答案 0 :(得分:3)

Simple Numpy切片返回视图,而不是副本。顾名思义,视图由相同的数据支持,只是表示不同。这是使Numpy如此之快的部分原因,因为每次切片时都不必创建数据副本。

请参阅the docs

我想不出c=a[:]有用的原因,但c=a[::2]可能有用。假设我得到其他每个元素的平均值,然后按平均值增加它们。

a=np.random.random(10)
b=a[::2]
b+=b.mean()
print a

没有理由特殊情况下您的示例返回副本而不是视图。事实上,熟悉Numpy切片如何工作的人会非常反直觉。