1、修改数组形状
函数 | 描述 |
---|---|
reshape | 不改变数据的条件下修改形状 |
flat | 数组元素迭代器 |
flatten | 返回一份数组拷贝,对拷贝所做的修改不会影响原始数组 |
ravel | 返回展开数组 |
1.1 numpy.reshape
numpy.reshape 函数可以在不改变数据的条件下修改形状,格式如下: numpy.reshape(arr, newshape, order=‘C’)
- arr:要修改形状的数组
- newshape:整数或者整数数组,新的形状应当兼容原有形状
- order:‘C’ – 按行,‘F’ – 按列,‘A’ – 原顺序,‘k’ – 元素在内存中的出现顺序。
import numpy as np
a = np.arange(8)
print('原始数组 : ')
print(a) # [0 1 2 3 4 5 6 7]
b = a.reshape(4,2)
print ('修改后的数组:')
print (b)
"""
原始数组 :
[0 1 2 3 4 5 6 7]
修改后的数组:
[[0 1]
[2 3]
[4 5]
[6 7]]
"""
1.2 numpy.ndarray.flat
numpy.ndarray.flat 是一个数组元素迭代器,实例如下:
a = np.arange(9).reshape(3, 3)
print('原始数组:')
for row in a:
print(row)
# 对数组中每个元素都进行处理,可以使用flat属性,该属性是一个数组元素迭代器:
print('迭代后的数组:')
for element in a.flat:
print(element, end=", ")
"""
原始数组:
[0 1 2]
[3 4 5]
[6 7 8]
迭代后的数组:
0, 1, 2, 3, 4, 5, 6, 7, 8,
"""
1.3 numpy.ndarray.flatten
numpy.ndarray.flatten 返回一份数组拷贝,对拷贝所做的修改不会影响原始数组,格式如下:
ndarray.flatten(order=‘C’)
参数说明:
order:‘C’ – 按行,‘F’ – 按列,‘A’ – 原顺序,‘K’ – 元素在内存中的出现顺序。
a = np.arange(8).reshape(2, 4)
print('原数组:')
print(a)
print('\n')
# 默认按行
print('展开的数组:')
print(a.flatten())
print('\n')
print('以 F 风格顺序展开的数组:')
print(a.flatten(order='F'))
"""
原数组:
[[0 1 2 3]
[4 5 6 7]]
展开的数组:
[0 1 2 3 4 5 6 7]
以 F 风格顺序展开的数组:
[0 4 1 5 2 6 3 7]
"""
1.4 numpy.ravel
numpy.ravel() 展平的数组元素,顺序通常是"C风格",返回的是数组视图,修改会影响原始数组。
该函数接收两个参数:
numpy.ravel(a, order=‘C’)
参数说明:
order:‘C’ – 按行,‘F’ – 按列,‘A’ – 原顺序,‘K’ – 元素在内存中的出现顺序。
a = np.arange(8).reshape(2, 4)
print('原数组:')
print(a)
print('\n')
print('调用 ravel 函数之后:')
x = a.ravel()
print(x)
print('\n')
x[1] = 100
print(x)
print(a)
"""
原数组:
[[0 1 2 3]
[4 5 6 7]]
调用 ravel 函数之后:
[0 1 2 3 4 5 6 7]
[ 0 100 2 3 4 5 6 7]
[[ 0 100 2 3]
[ 4 5 6 7]]
"""
发现一个问题a.ravel(order=‘F’) 时修改数据不会影响原始数据
a = np.arange(8).reshape(2, 4)
print('原数组:')
print(a)
print('\n')
print('调用 ravel 函数之后:')
x = a.ravel(order = 'F')
print(x)
print('\n')
x[1] = 100
print(x)
print(a)
"""
原数组:
[[0 1 2 3]
[4 5 6 7]]
调用 ravel 函数之后:
[0 4 1 5 2 6 3 7]
[ 0 100 1 5 2 6 3 7]
[[0 1 2 3]
[4 5 6 7]]
"""
2、翻转数组
函数 | 描述 |
---|---|
transpose | 对换数组的维度 |
ndarray.T | 对换数组的维度,和 self.transpose() 相同 |
rollaxis | 向后滚动指定的轴 |
swapaxes | 对换数组的两个轴 |
2.1 numpy.transpose
numpy.transpose 函数用于对换数组的维度,格式如下:
numpy.transpose(arr, axes)
参数说明:
arr:要操作的数组
axes:整数列表,对应维度,通常所有维度都会对换。
a = np.arange(12).reshape(3,4)
print('原数组: ')
print(a)
print('对换数组: ')
print(np.transpose(a))
"""
原数组:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
对换数组:
[[ 0 4 8]
[ 1 5 9]
[ 2 6 10]
[ 3 7 11]]
"""
2.2 ndarray.T
numpy.ndarray.T 类似 numpy.transpose:
a = np.arange(12).reshape(3, 4)
print('原数组:')
print(a)
print('\n')
print('转置数组:')
print(a.T)
"""
原数组:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
转置数组:
[[ 0 4 8]
[ 1 5 9]
[ 2 6 10]
[ 3 7 11]]
"""
2.3 numpy.rollaxis
numpy.rollaxis 函数向后滚动特定的轴到一个特定位置,格式如下:
numpy.rollaxis(arr, axis, start)
参数说明:
arr:数组
axis:要向后滚动的轴,其它轴的相对位置不会改变
start:默认为零,表示完整的滚动。会滚动到特定位置。
https://zhuanlan.zhihu.com/p/162874970
2.4 numpy.swapaxes
numpy.swapaxes 函数用于交换数组的两个轴,格式如下:
numpy.swapaxes(arr, axis1, axis2)
arr:输入的数组
axis1:对应第一个轴的整数
axis2:对应第二个轴的整数
https://zhuanlan.zhihu.com/p/162874970
3、修改数组维度
https://www.runoob.com/numpy/numpy-array-manipulation.html
4、 连接数组
https://www.runoob.com/numpy/numpy-array-manipulation.html
5、 分割数组
https://www.runoob.com/numpy/numpy-array-manipulation.html
6、 数组元素的添加与删除
https://www.runoob.com/numpy/numpy-array-manipulation.html
https://www.runoob.com/numpy/numpy-array-manipulation.html