在带有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是副本(如this question中所示)。
任何帮助解决这个问题都将受到赞赏。
答案 0 :(得分:5)
Basic slicing返回一个视图,而不是切片复制它们的Python列表。
但是,如果使用高级切片,切片将始终复制数据,就像连接或附加numpy数组一样。
比较
a = np.arange(16).reshape((4,4))
a_view = a[::2, ::3] # basic slicing
a_copy = a[[0, 2], :] # advanced
答案 1 :(得分:2)
在我的问题中,正在制作副本np.append
。切片不会复制数组/矩阵。
您可以使用
制作Bm
副本
Bm = B[1:, :].copy()
答案 2 :(得分: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进行更改。