【问题标题】:numpy.ravel giving 2D array - can anyone explain?numpy.ravel 给出二维数组 - 谁能解释一下?
【发布时间】:2022-07-21 22:19:30
【问题描述】:

我遇到了一些代码,其中使用 numpy.ravel() 会产生一个二维数组 - 我看过文档,它说 ravel() 返回一个一维数组(参见 @987654321 @)。

这里有一段代码 sn-p 显示了这一点:

def jumbo():
    import numpy as np
    my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    matrix = np.zeros((3,3))
    matrix.ravel()[:] = my_list
    return matrix

new_matrix = jumbo()
print(f"new matrix is:\n{new_matrix}")

我想我要问的部分内容是范围说明符 [:] 的功能是什么?

【问题讨论】:

  • 抱歉代码 sn-p - 我错过了格式在预览中消失...
  • 请注意这个“技巧”只适用于 C 连续数组

标签: python arrays numpy


【解决方案1】:

您所做的是在“raveled”矩阵中分配值,而实际上没有保存 ravel 操作。

matrix = np.empty((3,3))  # created empty matrix
matrix.ravel()  # created 1d view of matrix
matrix.ravel()[:]  # indexing every element of matrix to make assignment possible (matrix is still in (3,3) shape)
matrix.ravel()[:] = my_list  #  assigned values.

如果你想返回一维然后返回这样的散列数组

def jumbo():
    import numpy as np
    my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    matrix = np.empty((3,3))
    matrix.ravel()[:] = my_list
    return matrix.ravel()

new_matrix = jumbo()
print(f"new matrix is:\n{new_matrix}")

【讨论】:

  • 非常感谢,这增加了我的理解。原始代码需要一个长列表,需要分配给一个二维方阵,所以我不会利用你的代码返回一个一维数组(至少对于这个项目!)
【解决方案2】:

ravel 返回 numpy 数组的 view,因此当你这样做时:

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
matrix = np.zeros((3,3))
matrix.ravel()[:] = my_list

您正在使用视图作为将matrix 索引为一维的方式,暂时

这使得这里可以设置一维列表中的值,但底层数组仍然是二维的。

matrix.ravel()[:] 用于启用设置数据。您也可以使用 2 个步骤:

view = matrix.ravel()
view[:] = my_list

输出:

array([[1., 2., 3.],
       [4., 5., 6.],
       [7., 8., 9.]])

关于观点的重要说明

正如@Stef 在 cmets 中很好地指出的那样,这个“技巧”只适用于 C 连续数组,这意味着您不能使用 ravel('F')

演示:

view1 = matrix.ravel()
view2 = matrix.ravel('F') # actually not a view!

id(matrix)
# 140406991308816
id(view1.base)
# 140406991308816
id(view2.base)
# 9497104          # different id, we have a copy!

【讨论】:

  • 非常感谢,精美清晰的解释对我来说非常有意义。
  • 不客气!并感谢@MechanicPig 的修复!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-07
  • 2015-12-21
  • 2021-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多