numpy reshape 混淆与负形状值
Posted
技术标签:
【中文标题】numpy reshape 混淆与负形状值【英文标题】:numpy reshape confusion with negative shape values 【发布时间】:2016-12-28 12:55:21 【问题描述】:总是对 numpy reshape 如何处理负形状参数感到困惑,这是代码和输出的示例,有人能解释一下 reshape [-1, 1] 会发生什么吗?谢谢。
相关文档,使用 Python 2.7。
http://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html
import numpy as np
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import OneHotEncoder
S = np.array(['box','apple','car'])
le = LabelEncoder()
S = le.fit_transform(S)
print(S)
ohe = OneHotEncoder()
one_hot = ohe.fit_transform(S.reshape(-1,1)).toarray()
print(one_hot)
[1 0 2]
[[ 0. 1. 0.]
[ 1. 0. 0.]
[ 0. 0. 1.]]
【问题讨论】:
这能回答你的问题吗? What does -1 mean in numpy reshape? 【参考方案1】:来自reshape
docs:
一个形状维度可以是-1。在这种情况下,推断值 从数组的长度和剩余的维度。
在您的情况下,它用于将 (3,) S
转换为 (3,1) 数组的常见任务。我认为在这种特殊情况下使用S[:, None]
会产生相同的效果。
【讨论】:
谢谢 Aguy,当您说(3,)
时,语法有点困惑,,
在这里是什么意思?
只是为了设计一个元组。 (3)
是 3
,(3,)
是具有单个元素 3
的元组。 (形状是元组,即使它们只包含一个元素)
您可以将(n,)
numpy 对象视为一个向量,而将(n,1)
视为只有一列的矩阵。
感谢 Aguy,但如果 (3,)
仅表示元组中的一个元素,您将如何将其转换为 (3,1)
的形状?我认为(3,1)
表示 3 行 * 1 列,即 3 个元素?
@JulienBernu,但是如果(3,)
仅表示元组中的一个元素,您将如何将其转换为(3,1)
的形状?我认为(3,1)
表示 3 行 * 1 列,即 3 个元素?【参考方案2】:
-1
用于推断另一个缺失的长度。例如,将(3,4,5)
整形为(-1,10)
等效于整形为(6,10)
,因为6
是唯一对其他输入有意义的长度。
【讨论】:
谢谢 Julien,在你的例子中,它是 3 维数组 3*4*5?那么,如果在 reshape 之后我们需要将列数设为 10,行数必须为 6,这是正确的计算吗?谢谢。 是:输入数组有3*4*5 = 60
元素。输出将包含n_rows * 10
元素,因此我们需要求解n_rows * 10 = 60
得到n_rows = 6
。
谢谢 Julien,但是如果多个 -1 他们如何处理?
它不能因为它是模棱两可的,如文档中所述,或者如果你尝试抛出的错误......
感谢 Julien 的帮助,将您的回复标记为答案。 :)以上是关于numpy reshape 混淆与负形状值的主要内容,如果未能解决你的问题,请参考以下文章