【问题标题】:Python Numpy: Insert Data from 1D array into 2D arrayPython Numpy:将数据从一维数组插入二维数组
【发布时间】:2021-02-06 00:53:58
【问题描述】:

我正在尝试将一维数组中的数据插入到二维数组中,并且仍然保持二维数组的形状。

我下面的代码将二维数组重新格式化为一维数组。另外,为什么我现在有 26 个索引? 我错过了什么?

import numpy as np

oneD_Array = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
                      15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25])

twoD_Array = np.zeros((5, 5))

print(oneD_Array.shape)
print(oneD_Array)
print()
print()
print(twoD_Array.shape)
print(twoD_Array)

for i in range(len(oneD_Array), -1, -1):
    # for subArray in twoD_Array:
    twoD_Array = np.insert(oneD_Array, 0, [i])

print()
print(twoD_Array)
print(twoD_Array.shape)

输出是:

(25,)
[ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
 25]


(5, 5)
[[0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]]

[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
 24 25]
(26,)

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    您只需使用np.reshape

    twoD_Array = np.reshape(oneD_Array, (5, 5))
    

    输出:

    array([[ 1,  2,  3,  4,  5],
           [ 6,  7,  8,  9, 10],
           [11, 12, 13, 14, 15],
           [16, 17, 18, 19, 20],
           [21, 22, 23, 24, 25]])
    

    【讨论】:

    【解决方案2】:

    因为np.insert 实际上在给定索引处将一个元素插入到数组中。

    怎么样:

    twoD_Array.ravel()[:] = oneD_Array
    

    【讨论】:

    • 我对这个还是很陌生,不知道 .ravel,我会阅读更多内容。您提出的解决方案有效。
    【解决方案3】:

    如果你坚持使用循环,可以这样写:

    for i in range(len(oneD_Array)):
        twoD_Array[i//twoD_Array.shape[1], i%twoD_Array.shape[1]] = oneD_Array[i]
    

    但这绝对不是最快的方式。

    在我的机器上,对于 500x500 阵列,我的循环需要 85 ms,使用 ndarray.ravel 需要 223 µs,使用 np.reshape 需要 1.17 µs,使用 ndarray.reshape 需要 357 ns。所以我会选择

    twoD_Array = oneD_Array.reshape((5, 5))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-04
      • 2013-07-30
      • 2021-06-27
      • 1970-01-01
      • 1970-01-01
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多