np数组转为普通数组_⽤Python对numpy数组进⾏变形
本教程和备忘单提供可视化帮助您了解numpy如何重塑多维数组。
Cheatsheet for Python numpy reshape, stack, and flatten (created by Hause Lin and available here)
创建⼀个Python numpy数组
使⽤np.arange()⽣成⼀个numpy数组,其中包含从1到12的数字序列。请参见此处的⽂档。
import numpy as npa1 = np.arange(1, 13) # numbers 1 to 12print(a1.shape)> (12,)print(a1)> [ 1 2 3 4 5 6 7 8 9 10 11 12]
python获取数组长度使⽤reshape()⽅法重塑
使⽤reshape()⽅法将a1数组整形为3 x 4维数组。 让我们使⽤3_4来表⽰它的尺⼨:3是第0个尺⼨(轴),4是第1个尺⼨(轴)(请注
意,Python索引从0开始)。 请参阅此处的⽂档。
a1_2d = a1.reshape(3, 4) # 3_4print(a1_2d.shape)> (3, 4)print(a1_2d)> [[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]]
如果希望numpy⾃动确定特定尺⼨应为多少尺⼨/长度,请将该尺⼨指定为-1。
默认情况下,reshape()沿第0维(⾏)对数组进⾏整形。 可以通过命令参数更改此⾏为(默认值为" C")。 请参阅⽂档以获取更多信息。
通过将顺序更改为" F",我们可以沿第⼀维(列)重塑形状。 对于熟悉MATLAB的⼈,MATLAB使⽤此顺序。
测试:阵列a1的尺⼨/形状是什么?
a1是⼀维数组-仅具有1个维度,即使您可能认为其维度应为1_12(1⾏12列)。 要转换为1_12数组,请使⽤reshape()。
print(a1) # what's the shape?> [ 1 2 3 4 5 6 7 8 9 10 11 12]print(a1.shape)> (12,)a1_1_by_12 = a1.reshape(1, -1) # reshape to 1_12print(a1_1_by_使⽤ravel()展平/拖曳到⼀维数组
使⽤ravel()⽅法可以将多维数组转换为⼀维数组(请参见此处的⽂档)。 我们的2D数组(3_4)将被展平或拉平,使其成为具有12个元素的1D 数组。
如果您未指定任何参数,则ravel()将沿⾏(第0维/轴)展平/散列我们的2D数组。 即,第0⾏[1、2、3、4] +第1⾏[5、6、7、8] +第2⾏[9、10、11、12]。
如果要沿列(第1维)展平/滚动,请使⽤order参数。
print(a1_2d) # 3_4> [[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]]print(a1_2d.ravel()) # ravel by row (default order='C')> [ 1 2 3 4 5 6 7 8 9 10 11 12]print(使⽤np.stack()和np.hstack()连接/堆栈数组
创建两个⼀维数组
a1 = np.arange(1, 13)print(a1)> [ 1 2 3 4 5 6 7 8 9 10 11 12]a2 = np.arange(13, 25)print(a2)> [13 14 15 16 17 18 19 20 21 22 23 24]
使⽤np.stack()连接/堆栈数组。 默认情况下,np.stack()沿第0维(⾏)(参数轴= 0)堆叠数组。 有关更多信息,请参阅⽂档。
stack0 = np.stack((a1, a1, a2, a2)) # default stack along 0th axisprint(stack0.shape)> (4, 12)print(stack0)> [[ 1 2 3 4 5 6 7 8 9 10 11 12] [ 1 2 3 4
沿第⼀维堆叠(Axis= 1)
stack1 = np.stack((a1, a1, a2, a2), axis=1)print(stack1.shape)> (12, 4)print(stack1)> [[ 1 1 13 13] [ 2 2 14 14] [ 3 3 15 15] [ 4 4 16 16] [ 5 5 17 17] ⽤np.hstack()连接为长的⼀维数组(⽔平堆栈)
stack_long = np.hstack((a1, a2))print(stack_long.shape)> (24,)print(stack_long)> [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]创建多维数组(3D)
多维数组⾮常常见,称为张量。 它们在深度学习和神经⽹络中使⽤很多。 如果您要进⾏深度学习,则将定期重整张量或多维数组。
⾸先,我们创建两个不同的3 x 4数组。 稍后,我们将它们组合成⼀个3D阵列。
a1 = np.arange(1, 13).reshape(3, -1) # 3_4a2 = np.arange(13, 25).reshape(3, -1) # 3_4print(a1)> [[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]]print(a2)> [[13
通过沿不同的轴/维度堆叠数组来创建3D数组
a3_0 = np.stack((a1, a2)) # default axis=0 (dimension 0)a3_1 = np.stack((a1, a2), axis=1) # along dimension 1a3_2 = np.stack((a1, a2), axis=2) # along
让我们打印数组以查看它们的外观。 有关可视化的信息,请参见上图。
print(a3_0)> [[[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]] [[13 14 15 16] [17 18 19 20] [21 22 23 24]]]print(a3_1)> [[[ 1 2 3 4] [13 14 15 16]] [[ 5 6 7
由于这三个3D数组是通过沿不同维度堆叠两个数组⽽创建的,因此,如果我们要从这些3D数组中检索原始的两个数组,则必须沿正确的维度/轴进⾏⼦集化。
测试:我们如何从这些3D数组中检索a1数组?
print(a1) # check what's a1> [[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]]# solutionsa3_0[0, :, :]a3_0[0] # same as abovea3_1[:, 0, :]a3_2[:, :, 0]
展平多维数组
我们还可以使⽤ravel()展平多维数组。 下⾯,我们逐⾏浏览(默认顺序为" C")到⼀维数组。
print(a3_0)> [[[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]] [[13 14 15 16] [17 18 19 20] [21 22 23 24]]]p
rint(a3_0.ravel())> [ 1 2 3 4 5 6 7 8 9 10 11 1逐列划定(order ='F')到⼀维数组
print(a3_0.ravel(order='F'))> [ 1 13 5 17 9 21 2 14 6 18 10 22 3 15 7 19 11 23 4 16 8 20 12 24]
重塑多维数组
我们还可以使⽤reshape()重塑多维数组。
# reshape row by row (default order=C) to 2D arrayprint(a3_0) # 2_3_4> [[[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]] [[13 14 15 16] [17 18 19 20] [21 2结束语
我希望您现在对numpy如何重塑多维数组有了更好的了解。 我期待您的想法和评论。 另外,请查看有关numpy和数据表⽰的直观介绍。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论