【问题标题】:A simple numpy reshape function in python when making 2D array from 1D array从一维数组制作二维数组时,python中的一个简单的numpy reshape函数
【发布时间】:2016-12-06 00:33:20
【问题描述】:

我有一个涉及 np.reshape 的简单问题。我正在尝试学习如何使用 np.reshape 从一维数组制作一个二维数组。我看过这个教程,但我仍然对教程有一些疑问..

import numpy as np

a = np.arange(8*16)

frame_length = 8

a_framed = np.reshape(a, (-1, frame_length))

print (a_framed)

这是我的问题:

  1. frame_length 是否决定了新二维数组的列数?如果是这样,为什么不把数字 8 放在“a_framed”中呢?不可以吗?
  2. “a_framed”中的“-1”是什么?它有什么作用? (教程中省略了解释或对我来说不够)

谢谢! 切切

【问题讨论】:

  • 看起来有点矫枉过正...考虑... b = np.arange(8*16).reshape(8,16) ...请注意,如果您使用 n 的产生来生成 arange *m,您可以将 if 重塑为 (m,n) 并将其与 reshape(n,m) 进行比较。 (-1 只是用使其成为 2D 所需的任何数字替换重塑中的第一项
  • 嗨!感谢您的回复。您能否详细说明 -1 的作用?谢谢!
  • 在您的示例中, np.reshape 需要数组 'a' 和形状。形状为 (-1, frame_length) ... 由于指定了 2 个位置,因此您正在重塑为 2D 数组。现在,您只能对数组进行整形以匹配输入的大小,即 8*16 = 128。在整形中,第二项指定为等于 8 的 frame_length ... -1 本质上意味着“需要什么”保持数组的大小与 2D 形状相同...在这种情况下... (16, 8) size = np.prod(a.shape)。您可以更改 b = np.reshape(a, (2,2,4,8)) 之类的形状以查看相同数据的其他形状

标签: python-3.x numpy multidimensional-array


【解决方案1】:
  1. 是的。你可以。这是可能的,但该示例试图向您展示您在问题 2 中询问的功能。

  2. -1 通常是 python 中的通配符。在这种情况下,它是a.size/frame_length,另一个维度需要使用所有a。将 a_framed 更改为 4 或 16,它仍然有效。将其更改为 5 并且:

    Traceback (most recent call last):
    
    File "", line 4, in <module>
    a_framed = np.reshape(a, (-1, frame_length))
    
    File ". . . fromnumeric.py", line 225, in reshape
    return reshape(newshape, order=order)
    
    ValueError: total size of new array must be unchanged
    

它不适合,所以 numpy 抛出错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-04
    • 2019-01-11
    • 1970-01-01
    • 2021-02-06
    • 2017-12-06
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多