【发布时间】:2018-05-14 12:17:23
【问题描述】:
我有一个大型 2d numpy 数组,我想删除它的子集并处理函数的剩余部分。我需要对许多子集执行此操作,因此理想情况下我不想每次都创建数组的副本。该函数不会更改数组中的任何值。
mat = np.load(filename)
mat_1 = mat[:i,:]
mat_2 = mat[j:,:]
到目前为止,mat_1 和 mat_2 是视图。 那我就想做
mat_s = np.concatenate((mat_1,mat_2))
result = func(mat_s)
但没有复制。这可能吗?
【问题讨论】:
-
你为什么不直接使用
mat[j:i,:]? -
@Kasramvd 这与他正在做的事情不同。想想
(100, 1)与i=50和j=20的形状数组。生成的np.concatenate会创建一个重叠的结果数组,而您的mat[j:i,:]不会。 -
应该指定,但 j 大于 i。那只会返回一个空数组。
-
啊哈,所以如果
j > i,那么np.concatenate不会创建重叠数组,而是连接两个分离的数组。 Kasramvd 的解决方案仍然不起作用。 filippo 已经展示了解决这个问题的好方法。 -
@filippo 是的,没错,它实际上会重复一些行。