Ent*_*elR 4 python numpy numpy-ndarray
我发现自己需要向现有的 numpy 数组添加功能,这导致了以下代码的最后一部分实际上在做什么的问题:
np.ones(shape=feature_set.shape)[...,None]
Run Code Online (Sandbox Code Playgroud)
设置
例如,假设我希望通过使用 numpy 和求解来求解线性回归参数估计:
假设我有一个特征集形状 (50,1),一个形状为 (50,) 的目标变量,并且我希望使用我的目标变量的形状为截距值添加一列。
它看起来像这样:
# Create random target & feature set
y_train = np.random.randint(0,100, size = (50,))
feature_set = np.random.randint(0,100,size=(50,1))
# Build a set of 1s after shape of target variable
int_train = np.ones(shape=y_train.shape)[...,None]
# Able to then add int_train to feature set
X = np.concatenate((int_train, feature_set),1)
Run Code Online (Sandbox Code Playgroud)
我认为我知道的
当我包含 [...,None] 时,我看到输出的差异与我不使用它时的差异。这里是:
第二个版本在需要相同维数的输入数组周围返回错误,最终我偶然发现了使用 [...,None] 的解决方案。
主要问题
虽然我看到的输出[...,无]给我我想要的,我苦苦寻找的任何信息,什么是真正应该做的。任何人都可以带我了解这段代码的实际含义,None参数在做什么,等等?
谢谢!
切片[..., None]由两个“快捷方式”组成:
省略号文字组件:
点 (...) 表示生成完整索引元组所需的尽可能多的冒号。例如,如果 x 是一个秩为 5 的数组(即它有 5 个轴),则
x[1,2,...]相当于x[1,2,:,:,:],x[...,3]到x[:,:,:,:,3]和x[4,...,5,:]到x[4,:,:,5,:]。
(来源)
该None组件:
numpy.newaxis该
newaxis对象可用于所有切片操作以创建长度为 1 的轴。newaxis是 'None' 的别名,并且可以使用 'None' 代替它,结果相同。
(来源)
因此,arr[..., None]采用一个维度数组N并“在最后”为维度的结果数组“添加”一个维度N+1。
例子:
import numpy as np
x = np.array([[1,2,3],[4,5,6]])
print(x.shape) # (2, 3)
y = x[...,None]
print(y.shape) # (2, 3, 1)
z = x[:,:,np.newaxis]
print(z.shape) # (2, 3, 1)
a = np.expand_dims(x, axis=-1)
print(a.shape) # (2, 3, 1)
print((y == z).all()) # True
print((y == a).all()) # True
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3733 次 |
| 最近记录: |