如何截断一个numpy数组?
Posted
技术标签:
【中文标题】如何截断一个numpy数组?【英文标题】:How to truncate a numpy array? 【发布时间】:2018-11-27 17:21:48 【问题描述】:我正在尝试使用以下代码行将“数据”(大小为 112943)截断为 (1,15000):
data = np.reshape(data, (1, 15000))
但是,这给了我以下错误:
ValueError: cannot reshape array of size 112943 into shape (1,15000)
关于如何修复此错误的任何建议?
【问题讨论】:
什么是形状(数据)? 截断和整形是两种不同的操作。截断改变大小,但保持形状。 Reshape 保持大小,但改变形状。我建议你使用切片。 我正在尝试删除除前 15,000 个元素之外的所有内容 当您说“截断”时,您只是想获得前 15,000 个元素的新数组,可能共享相同的内存,还是实际截断存储(或复制其中的一部分)所以额外的800K左右的内存可以释放吗? 【参考方案1】:换句话说,由于您只需要前 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)
【讨论】:
【参考方案2】:你可以使用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
来表示危险的就地版本。在脚本或模块中,您不必也不应该这样做。
【讨论】:
以上是关于如何截断一个numpy数组?的主要内容,如果未能解决你的问题,请参考以下文章