如何将数组升采样为任意大小?

时间:2019-07-24 07:17:09

标签: python arrays python-3.x numpy resize

我正在尝试通过按比例将每个元素按比例地重复到新的大小来在Python中将数组调整为更大的大小。但是,我希望能够调整为任意大小。

我知道我可以使用numpy.repeat来实现,例如,如果我必须将大小增加一倍,但是可以说我想将大小为(180,150)的数组转换为(300,250)。我知道没有完美的方法可以做到这一点,但我正在寻找最有效的方法(信息丢失最少)!

到目前为止,我将数组转换为图像并相应地调整其大小,然后再次将其转换为数组。但是,似乎我无法将所有类型的数据都转换为图像,因此我需要一种通用的方法来实现此目的。

例如,假设我有一个大小为(2,2)的输入数组:

input_array=np.array([[1,2],[3,4]])

如果我想将其转换为(3,3)数组,输出可能像这样:

output_array=np.array([[1,1,2],[1,1,2],[3,3,4]])

就像我之前说过的那样,我只是不想平铺或填充零,我想通过重复某些元素来扩大尺寸。

2 个答案:

答案 0 :(得分:3)

对于要达到的最终结果没有一个清晰的主意,您的问题会打开多个路径和解决方案。仅举几例:

  1. 使用numpy.resize
import numpy as np

input_array=np.array([[1.,2],[3,4]])

np.resize(input_array, (3,3))

您得到:

array([[1., 2., 3.],
       [4., 1., 2.],
       [3., 4., 1.]])
  1. 使用cv2.resize
import cv2
import numpy as np

input_array=np.array([[1.,2],[3,4]])

cv2.resize(input_array,
           (3,3),
           interpolation=cv2.INTER_NEAREST)

您得到:

array([[1., 1., 2.],
       [1., 1., 2.],
       [3., 3., 4.]])

根据您的目标,可以使用不同的插值方法。

答案 1 :(得分:1)

如果您寻找纯粹的numpy解决方案,则可以尝试使用花式索引:

(localdb)\MSSQLLocalDB