Python numpy 模块有一个 shape 函数,它可以帮助我们找到数组或矩阵的大小。除了这个 shape 函数,Python numpy 模块还有 reshape、resize、transpose、swapaxes、flatten、ravel 和 squeeze 函数来改变数组的矩阵到所需的大小。
Python numpy 数组的形状
numpy 模块有一个重要的属性叫做 shape,这个属性用来获取或查找它的形状。
import numpy as np arr = np.array([10, 20, 30, 40, 50, 60, 70, 80]) print(arr) print(np.shape(arr))
[10 20 30 40 50 60 70 80]
(8,)
让我再举一个 Python numpy 数组形状的例子。这里,我们使用了不同大小的数组,然后使用这个属性找到了它们的形状。
import numpy as np
x = np.array([[10, 20, 30], [40, 50, 60]])
print(x)
print('x = ', np.shape(x))
print()
arr = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
print(arr)
print('arr = ', np.shape(arr))
arr1 = np.random.randint(5, 50, size = (5, 8))
print('\n-----Two Dimensional Random----')
print(arr1)
print('arr1 = ', np.shape(arr1))
arr2 = np.array([[[ 7, 24, 24, 22], [24, 10, 16, 2], [ 1, 16, 7, 16]],
[[22, 23, 12, 39], [16, 30, 37, 15],[16, 17, 3, 19]]])
print('\n-----Three Dimensional----')
print(arr2)
print('arr2 = ', np.shape(arr2))
[[10 20 30]
[40 50 60]]
x = (2, 3)
[[1 2]
[3 4]
[5 6]
[7 8]]
arr = (4, 2)
-----Two Dimensional Random----
[[15 41 15 28 34 39 29 38]
[12 39 22 37 32 15 40 17]
[48 18 23 41 43 21 10 12]
[33 49 9 18 31 38 24 28]
[10 46 46 10 41 37 40 21]]
arr1 = (5, 8)
-----Three Dimensional----
[[[ 7 24 24 22]
[24 10 16 2]
[ 1 16 7 16]]
[[22 23 12 39]
[16 30 37 15]
[16 17 3 19]]]
arr2 = (2, 3, 4)
数组重塑
这个 numpy Array shape 函数接受一个数组作为第一个参数,形状或矩阵大小作为第二个参数。
import numpy as np
arr = np.array([[10, 20, 30], [40, 50, 60]])
print(arr)
print('arr = ', np.shape(arr))
print('\n---New---')
new_arr = np.reshape(arr, (6,))
print(new_arr)
print('new_arr = ', np.shape(new_arr))
输出
[[10 20 30]
[40 50 60]]
arr = (2, 3)
---New---
[10 20 30 40 50 60]
new_arr = (6,)
这是 reshape 函数的另一个例子。在这里,我们使用了一个一维数组,并将其重塑为不同的维度。供您参考,我们正在使用 Python Numpy 数组函数来返回重塑后的形状。
import numpy as np
arr = np.array([10, 20, 30, 40, 50, 60, 70, 80])
print(arr)
print(np.shape(arr))
print('\n---New ---')
new_arr = np.reshape(arr, (2,4))
print(new_arr)
print(np.shape(new_arr))
print('\n---New ---')
new_arr1 = np.reshape(arr, (4, 2))
print(new_arr1)
print(np.shape(new_arr1))
print('\n---New ---')
new_arr2 = np.reshape(arr, (8,1))
print(new_arr2)
print(np.shape(new_arr2))
[10 20 30 40 50 60 70 80]
(8,)
---New ---
[[10 20 30 40]
[50 60 70 80]]
(2, 4)
---New ---
[[10 20]
[30 40]
[50 60]
[70 80]]
(4, 2)
---New ---
[[10]
[20]
[30]
[40]
[50]
[60]
[70]
[80]]
(8, 1)
如果你不知道或不想使用第二个值,那么你可以赋值为 -1。reshape 函数会自动选择大小并将其替换为 -1。
import numpy as np
arr = np.array([[10, 20, 30, 40, 50, 60, 70, 80]])
print(arr)
print('Array Shape = ', np.shape(arr))
print('\n---New ---')
new_arr = np.reshape(arr, (2,-1))
print(new_arr)
print(np.shape(new_arr))
print('\n---New ---')
new_arr1 = np.reshape(arr, (4, -1))
print(new_arr1)
print(np.shape(new_arr1))
[[10 20 30 40 50 60 70 80]]
Array Shape = (1, 8)
---New ---
[[10 20 30 40]
[50 60 70 80]]
(2, 4)
---New ---
[[10 20]
[30 40]
[50 60]
[70 80]]
(4, 2)
使用 resize 改变 Python numpy 数组的形状
resize 函数可用于将现有的 numpy 数组调整为所需的形状。此函数接受一个数组作为第一个参数,以及所需的形状大小作为第二个参数。如果您指定的所需形状大于原始形状,则 Numpy 数组的 resize 函数会复制基本数组中的值以创建一个大数组。
import numpy as np
arr = np.array([1, 2, 3])
print(arr)
print('\n---New ---')
new_arr = np.resize(arr, (4, 3))
print(new_arr)
print('\n---New ---')
new_arr1 = np.resize(arr, (9, 8))
print(new_arr1)
resize 函数改变形状的输出
[1 2 3]
---New ---
[[1 2 3]
[1 2 3]
[1 2 3]
[1 2 3]]
---New ---
[[1 2 3 1 2 3 1 2]
[3 1 2 3 1 2 3 1]
[2 3 1 2 3 1 2 3]
[1 2 3 1 2 3 1 2]
[3 1 2 3 1 2 3 1]
[2 3 1 2 3 1 2 3]
[1 2 3 1 2 3 1 2]
[3 1 2 3 1 2 3 1]
[2 3 1 2 3 1 2 3]]
让我们看看当我们将 Python 数组调整为较小的大小时会发生什么。
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
print('---Original Array---')
print(arr)
print('\n---New Array---')
new_arr = np.resize(arr, (1, 3))
print(new_arr)
print('\n---New Array---')
new_arr1 = np.resize(arr, (4, 1))
print(new_arr1)

如何使用 transpose 改变 Python numpy 数组的形状?
transpose 函数可以帮助您转置给定的矩阵或二维数组。
import numpy as np
arr = np.random.randint(5, 50, size = (5, 8))
print('\n-----Two Dimensional Random ----')
print(arr)
print('\n-----Transposed Two Dimensional ----')
print(np.transpose(arr))
使用 transpose 函数改变形状的输出
-----Two Dimensional Random----
[[11 28 30 26 8 39 26 46]
[16 22 27 9 25 16 17 10]
[20 42 14 36 31 22 43 10]
[41 35 25 13 36 33 18 23]
[21 46 42 39 48 9 21 44]]
-----Transposed Two Dimensional----
[[11 16 20 41 21]
[28 22 42 35 46]
[30 27 14 25 42]
[26 9 36 13 39]
[ 8 25 31 36 48]
[39 16 22 33 9]
[26 17 43 18 21]
[46 10 10 23 44]]
使用 transpose 改变 Python numpy 三维数组的形状
让我使用这个 transpose 函数来转置一个 3D 数组
import numpy as np
arr2 = np.random.randint(1, 20, size = (2, 3, 4))
print('\n-----Three Dimensional Random ----')
print(arr2)
print('\n-----Transposed Three Dimensional ----')
print(np.transpose(arr2))
通过转置三维数组改变形状的输出
-----Three Dimensional Random ----
[[[ 5 11 8 7]
[17 14 12 14]
[19 16 1 17]]
[[ 1 13 12 10]
[18 3 5 18]
[ 6 1 12 10]]]
-----Transposed Three Dimensional ----
[[[ 5 1]
[17 18]
[19 6]]
[[11 13]
[14 3]
[16 1]]
[[ 8 12]
[12 5]
[ 1 12]]
[[ 7 10]
[14 18]
[17 10]]]
使用 swapaxes 改变 Python numpy 数组的形状
swapaxes 函数用于交换数组给定的两个轴。它接受三个参数——名称、first_axis 和 second_axis。接下来,numpy swapaxes 函数交换 first_axis 和 second_axis。
import numpy as np
arr1 = np.array([[10, 20, 30, 40]])
print(arr1)
print('swapaxes Result of arr1')
print(np.swapaxes(arr1, 0, 1))
arr2 = np.array([[10, 20, 30], [40, 50, 60]])
print(arr2)
print('swapaxes Result of arr2')
print(np.swapaxes(arr2, 0, 1))
arr3 = np.array([[[10, 20], [30, 40], [50, 60]]])
print('swapaxes Result of arr3')
print(np.swapaxes(arr3, 0, 1))
print('swapaxes Result of arr3 - 0, 2')
print(np.swapaxes(arr3, 0, 2))
print('swapaxes Result of arr3 - 2, 1')
print(np.swapaxes(arr3, 2, 1))
swapaxes 输出
[[10 20 30 40]]
swapaxes Result of arr1
[[10]
[20]
[30]
[40]]
[[10 20 30]
[40 50 60]]
swapaxes Result of arr2
[[10 40]
[20 50]
[30 60]]
swapaxes Result of arr3
[[[10 20]]
[[30 40]]
[[50 60]]]
swapaxes Result of arr3 - 0, 2
[[[10]
[30]
[50]]
[[20]
[40]
[60]]]
swapaxes Result of arr3 - 2, 1
[[[10 30 50]
[20 40 60]]]
这次,我们在由 randint 函数生成的三维随机数组上使用了这个 Python swapaxes 函数。
import numpy as np
arr3 = np.random.randint(1, 40, size = (2, 3, 4))
print(arr3)
print('swapaxes Result of arr3, 0, 1')
print(np.swapaxes(arr3, 0, 1))
print('swapaxes Result of arr3, 0, 2')
print(np.swapaxes(arr3, 0, 2))
print('swapaxes Result of arr3, 2, 1')
print(np.swapaxes(arr3, 2, 1))
swapaxes 函数输出
[[[22 38 11 37]
[33 33 37 30]
[37 29 17 13]]
[[26 17 8 35]
[38 28 28 32]
[ 7 38 15 26]]]
swapaxes Result of arr3, 0, 1
[[[22 38 11 37]
[26 17 8 35]]
[[33 33 37 30]
[38 28 28 32]]
[[37 29 17 13]
[ 7 38 15 26]]]
swapaxes Result of arr3, 0, 2
[[[22 26]
[33 38]
[37 7]]
[[38 17]
[33 28]
[29 38]]
[[11 8]
[37 28]
[17 15]]
[[37 35]
[30 32]
[13 26]]]
swapaxes Result of arr3, 2, 1
[[[22 33 37]
[38 33 29]
[11 37 17]
[37 30 13]]
[[26 38 7]
[17 28 38]
[ 8 28 15]
[35 32 26]]]
使用 flatten 改变 Python numpy 数组的形状
flatten 函数将给定的数组折叠成一维数组。这个 Numpy 数组的 flatten 函数接受 order 参数来决定扁平化项目的顺序。
order = {C, F, A, K} – 您可以使用其中一个,或者它会认为是 C,因为它是默认值。C 表示项目将按行主序扁平化。F 表示 Fortran 风格或列主序。如果数组是 Fortran 连续的,A 将按列主序扁平化,否则按行主序。K 将按元素在内存中出现的顺序扁平化。
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print('flatten Result of arr Order C = ', arr.flatten())
print('flatten Result of arr Order F = ', arr.flatten('F'))
print('flatten Result of arr Order A = ', arr.flatten('A'))
print('flatten Result of arr Order K = ', arr.flatten('K'))
arr1 = np.array([[10, 20], [30, 40], [50, 60], [70, 80]])
print('\nflatten Result of arr1 Order C')
print(arr1.flatten())
print('\nflatten Result of arr1 = F')
print(arr1.flatten('F'))
print('\nflatten Result of arr1 = A')
print(arr1.flatten('A'))
print('\nflatten Result of arr1 = K')
print(arr1.flatten('K'))
使用 flatten 函数的输出
flatten Result of arr Order C = [1 2 3 4 5 6]
flatten Result of arr Order F = [1 4 2 5 3 6]
flatten Result of arr Order A = [1 2 3 4 5 6]
flatten Result of arr Order K = [1 2 3 4 5 6]
flatten Result of arr1 Order C
[10 20 30 40 50 60 70 80]
flatten Result of arr1 = F
[10 30 50 70 20 40 60 80]
flatten Result of arr1 = A
[10 20 30 40 50 60 70 80]
flatten Result of arr1 = K
[10 20 30 40 50 60 70 80]
这次,我们使用 randint 函数生成了一个 随机 三维整数数组。接下来,我们使用这个 Python Numpy flatten 函数将其扁平化为一维数组。
import numpy as np
arr2 = np.random.randint(1, 40, size = (2, 3, 4))
print(arr2)
print('flatten Result of arr2')
print(arr2.flatten())
print('\nflatten Result of arr2 = F')
print(arr2.flatten('F'))
print('\nflatten Result of arr2 = A')
print(arr2.flatten('A'))
print('\nflatten Result of arr2 = K')
print(arr2.flatten('K'))
flatten 函数用于扁平化或改变形状的输出
[[[38 14 31 31]
[14 16 34 21]
[ 6 11 37 33]]
[[11 17 7 33]
[31 34 30 28]
[36 14 39 8]]]
flatten Result of arr2
[38 14 31 31 14 16 34 21 6 11 37 33 11 17 7 33 31 34 30 28 36 14 39 8]
flatten Result of arr2 = F
[38 11 14 31 6 36 14 17 16 34 11 14 31 7 34 30 37 39 31 33 21 28 33 8]
flatten Result of arr2 = A
[38 14 31 31 14 16 34 21 6 11 37 33 11 17 7 33 31 34 30 28 36 14 39 8]
flatten Result of arr2 = K
[38 14 31 31 14 16 34 21 6 11 37 33 11 17 7 33 31 34 30 28 36 14 39 8]
使用 ravel 改变 Python numpy 数组的形状
ravel 函数返回一个连续的扁平一维数组。这个 Python Numpy ravel 函数的语法是
numpy.ravel(name, order = {C, F, A, K})
此 ravel 函数接受 order 参数以决定扁平化项目的顺序。C 表示行主序中的项目索引。F 表示 Fortran 风格或列主序中的索引项目。如果它是 Fortran 连续的,A 按列主序读取索引,否则按行主序。K 按元素在内存中出现的顺序读取索引。
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print('arr ravel Result of Order C = ', np.ravel(arr))
print('arr ravel Result of Order F = ', np.ravel(arr, order = 'F'))
print('arr ravel Result of Order A = ', np.ravel(arr, order = 'A'))
print('arr ravel Result of Order K = ', np.ravel(arr, order = 'K'))
arr1 = np.array([[11, 20], [33, 40], [55, 60], [77, 80]])
print('\narr1 ravel Result of Order C = ', np.ravel(arr1))
print('arr1 ravel Result of Order F = ', np.ravel(arr1, order = 'F'))
print('arr1 ravel Result of Order A = ', np.ravel(arr1, order = 'A'))
print('arr1 ravel Result of Order K = ', np.ravel(arr1, order = 'K'))
ravel 函数用于形状数组的输出
arr ravel Result of Order C = [1 2 3 4 5 6]
arr ravel Result of Order F = [1 4 2 5 3 6]
arr ravel Result of Order A = [1 2 3 4 5 6]
arr ravel Result of Order K = [1 2 3 4 5 6]
arr1 ravel Result of Order C = [11 20 33 40 55 60 77 80]
arr1 ravel Result of Order F = [11 33 55 77 20 40 60 80]
arr1 ravel Result of Order A = [11 20 33 40 55 60 77 80]
arr1 ravel Result of Order K = [11 20 33 40 55 60 77 80]
在这个例子中,我们使用 Python randint 函数声明了一个三维随机整数数组。接下来,我们使用这个 ravel 函数将这个随机数组扁平化为一个连续的一维数组。
import numpy as np
arr = np.random.randint(1, 40, size = (2, 3, 4))
print(arr)
print('\narr ravel Result of Order C')
print(np.ravel(arr))
print('arr ravel Result of Order F')
print(np.ravel(arr, order = 'F'))
print('arr ravel Result of Order A')
print(np.ravel(arr, order = 'A'))
print('arr ravel Result of Order K')
print(np.ravel(arr, order = 'K'))
print('\nTransposed arr ravel Result of Order C')
print(np.ravel(arr.T))
ravel 函数输出
[[[ 7 9 22 11]
[ 4 8 11 35]
[ 3 34 28 5]]
[[28 18 18 15]
[14 37 8 23]
[35 35 13 23]]]
arr ravel Result of Order C
[ 7 9 22 11 4 8 11 35 3 34 28 5 28 18 18 15 14 37 8 23 35 35 13 23]
arr ravel Result of Order F
[ 7 28 4 14 3 35 9 18 8 37 34 35 22 18 11 8 28 13 11 15 35 23 5 23]
arr ravel Result of Order A
[ 7 9 22 11 4 8 11 35 3 34 28 5 28 18 18 15 14 37 8 23 35 35 13 23]
arr ravel Result of Order K
[ 7 9 22 11 4 8 11 35 3 34 28 5 28 18 18 15 14 37 8 23 35 35 13 23]
Transposed arr ravel Result of Order C
[ 7 28 4 14 3 35 9 18 8 37 34 35 22 18 11 8 28 13 11 15 35 23 5 23]
使用 squeeze 改变 numpy 数组的形状
squeeze 函数从给定形状中删除单维条目。这个 squeeze 函数的语法是
numpy.squeeze(array_name, axis = {None, 0, 1, 2 ..}).
import numpy as np
arr = np.arange(12).reshape(1, 3, 4)
print(arr)
print('\narr squeeze Result')
a = np.squeeze(arr)
print(a)
print('a = ', arr.shape, a.shape)
b = np.squeeze(arr, axis = 0)
print(b)
print('b = ', arr.shape, b.shape)
arr1 = np.array([[[[11, 20], [33, 40], [55, 60], [77, 80]]]])
x = np.squeeze(arr1)
print(x)
print('x = ', arr1.shape, x.shape)
y = np.squeeze(arr1, axis = 1)
print(y)
print('y = ', arr1.shape, y.shape)
squeeze 函数输出
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]]
arr squeeze Result
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
a = (1, 3, 4) (3, 4)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
b = (1, 3, 4) (3, 4)
[[11 20]
[33 40]
[55 60]
[77 80]]
x = (1, 1, 4, 2) (4, 2)
[[[11 20]
[33 40]
[55 60]
[77 80]]]
y = (1, 1, 4, 2) (1, 4, 2)