Numpy:只用于数据可视化的numpy.roll等效方法

7 投票
1 回答
1126 浏览
提问于 2025-04-17 05:52

有没有办法对一个数组进行滚动操作,但不是复制数据,而是以不同的方式展示它?

举个例子来说明:假设有一个数组 b 是数组 a 的滚动版本...

>>> a = np.random.randint(0, 10, (3, 3))
>>> a
array([[6, 7, 4],
       [5, 4, 8],
       [1, 3, 4]])
>>> b = np.roll(a, 1, axis=0)
>>> b
array([[1, 3, 4],
       [6, 7, 4],
       [5, 4, 8]])

...如果我对数组 b 进行赋值操作...

>>> b[2,2] = 99
>>> b
array([[ 1,  3,  4],
       [ 6,  7,  4],
       [ 5,  4, 99]])

...那么数组 a 的内容不会改变...

>>> a
array([[6, 7, 4],
       [5, 4, 8],
       [1, 3, 4]])

...相反,我想要的是:

>>> a
array([[6, 7, 4],
       [5, 4, 99],    # observe as `8` has been changed here too!
       [1, 3, 4]])

谢谢你们的时间和专业意见!

1 个回答

9

抱歉,这个是不可能的。你不能用另一组步幅来描述这个滚动数组,而这正是让NumPy视图正常工作的必要条件。

撰写回答