如何截断一个numpy数组?

7

我正在尝试使用以下代码将大小为112943的“数据”截断为形状(1,15000):

data = np.reshape(data, (1, 15000))

然而,这给了我以下错误:
ValueError: cannot reshape array of size 112943 into shape (1,15000)

有什么建议可以解决这个错误吗?

1
什么是 shape(data)? - skrubber
截断和重塑是两个不同的操作。截断改变大小,但保持形状。重塑保持大小,但改变形状。我建议您使用切片。 - DYZ
我正在尝试删除除前15,000个元素以外的所有内容。 - 1arnav1
当你说“truncate”时,你是想要一个新的数组,包含前15000个元素,并可能共享同一内存,还是想要实际截断存储(或复制部分)以释放额外的大约800K内存? - abarnert
2个回答

12

换句话说,如果你只需要前15K个元素,你可以使用基本切片:

In [114]: arr = np.random.randn(112943)

In [115]: truncated_arr = arr[:15000]

In [116]: truncated_arr.shape
Out[116]: (15000,)

In [117]: truncated_arr = truncated_arr[None, :]

In [118]: truncated_arr.shape
Out[118]: (1, 15000)

4
你可以使用 resize
>>> import numpy as np
>>> 
>>> a = np.arange(17)
>>> 
# copy
>>> np.resize(a, (3,3))
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> 
# in-place - only use if you know what you are doing
>>> a.resize((3, 3), refcheck=False)
>>> a
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

请注意,我认为这是因为交互式 shell 会保留一些对最近评估的内容的额外引用,所以在原地版本中必须使用 refcheck=False,但这是很危险的。在脚本或模块中,您不需要这样做,也不应该这样做。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接