如何使用 np.newaxis 将 (1,16) 数组转换为 (1,16,1) 数组? [复制]

Posted

技术标签:

【中文标题】如何使用 np.newaxis 将 (1,16) 数组转换为 (1,16,1) 数组? [复制]【英文标题】:How can I trasform a (1,16) array in a (1,16,1) array with np.newaxis? [duplicate] 【发布时间】:2019-10-01 09:01:22 【问题描述】:

我想改造这个数组 (1, 16)

[[4 4 4 4 4 4 4 4 4 4 4 4 0 0 0 0]]

在 (1,16,1) 数组中。

我试过了:

board = board[np.newaxis, :]

但这不是加速输出。

我该怎么做?

【问题讨论】:

board[:, np.newaxis] 什么是意外输出? @MadPhysicist 一个形状为 (1, 16, 1) 的数组 【参考方案1】:

您必须将np.newaxis 放在您想要这个新轴的尺寸位置上。

board[np.newaxis,:] -> puts the axis in the first dimension [1,1,16]
board[:,np.newaxis] -> puts the axis in the second dimension [1,1,16]
board[:,:,np.newaxis] -> puts the axis in the third dimension [1,16,1]

【讨论】:

【参考方案2】:

尝试重塑:

import numpy as np

a = np.array([[4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0]])

print(a.reshape(1,16,1).shape)

【讨论】:

【参考方案3】:

另外,您可以使用numpy.expand_dims(),如:

# input arrray
In [41]: arr
Out[41]: array([[4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0]])

In [42]: arr.shape
Out[42]: (1, 16)

# insert a singleton dimension at the end    
In [44]: arr_3D = np.expand_dims(arr, -1)

# desired shape
In [45]: arr_3D.shape
Out[45]: (1, 16, 1)

数组提升的其他方式有:

In [47]: arr[..., None]

In [48]: arr[..., np.newaxis]

【讨论】:

【参考方案4】:

我的首选方法(很容易找到新轴,并且只涉及 None 内置):

import numpy as np
a1 = np.array([[4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0]])
print(a1[:,:,None].shape)

正如 Mad Physicist 所说,这完全等同于使用 np.newaxisprint(np.newaxis) 返回 None

【讨论】:

np.newaxis 是对None的直接引用 我知道,但我发现记住 None 比记住 np.newaxis 更容易。偏好可能会有所不同:-) 我碰巧同意您的偏好和您的评论。只是想让未来的读者明白。

以上是关于如何使用 np.newaxis 将 (1,16) 数组转换为 (1,16,1) 数组? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

numpy np.newaxis 的实用

np newaxis 为 numpy ndarray(多维数组)增加一个轴

np.newaxis 为 numpy.ndarray(多维数组)增加一个轴

numpy给数据新增一个维度np.newaxis及其使用场景

numpy中一维数组增加维度,None,np.newaxis

np.newaxis()用法