4

我有一个 NumPy 数组,我们称之为A. 我不清楚以下代码的行为:

b = A[3,:];
A[3,:] = 0;

第三行必须保存在 中b,但意外地b也变成了零!

有什么帮助吗?

4

2 回答 2

2

事实上,要制作副本,您必须制作copy!

b = A[3,:].copy()

(顺便说一句,python 不是 C:语句后不需要分号。)

于 2012-11-27T16:38:30.473 回答
2

从 MATLAB/Octave 迁移我看到了 :-)?

1) 请记住 Python 使用基于 0 的数组,而不是 MATLAB 的基于 1 的数组。 A[3,:]实际上会给你第四行。

2) 与 MATLAB 不同,从这样的数组中获取切片会将切片的内存位置从slicee 存储slicer中。因此,正如 Andrew J. 所说,您需要复制。

根据您想要“第三行必须保存在 b 中”的声明,您的代码应该是

b = A[2,:].copy()
于 2012-11-28T10:02:16.563 回答