2

在带有 numpy 1.5.1 的 python 2.7.1 中:

import numpy as np

B = np.matrix([[-float('inf'), 0], [0., 1]])
print B
Bm = B[1:, :]
Bm[:, 1] = float('inf')
print B

返回

[[-inf   0.]
 [  0.   1.]]
[[-inf   0.]
 [  0.  inf]]

这是非常出乎意料的,因为我认为 Bm 是一个副本(如在这个问题中)。

任何解决此问题的帮助将不胜感激。

4

3 回答 3

5

numpy 中的基本切片返回一个视图,而不是切片 Python 列表,后者复制它们。

但是,如果使用高级切片,切片将始终复制数据,就像连接或附加 numpy 数组一样。

比较

a = np.arange(16).reshape((4,4))
a_view = a[::2, ::3]  # basic slicing
a_copy = a[[0, 2], :]  # advanced
于 2012-05-20T10:06:04.630 回答
2

在我的问题中,这是np.append在制作副本。切片不会复制数组/矩阵。

你可以Bm

Bm = B[1:, :].copy()
于 2012-05-20T09:48:26.457 回答
0

从 jorgeca 的例子来看,这很有趣:

a = np.arange(16).reshape((4,4))
a_view = a[::2, ::3]  # basic slicing
a_copy = a[[0, 2], :]  # advanced

我的附加评论可能是题外话,但令人惊讶的是以下两者

a[::2, ::3]+= 1  # basic slicing
a[[0, 2], :]+= 1 # advanced

将对 a 进行更改。

于 2013-12-22T01:49:39.813 回答