Numpy 数组操作01

这篇博客介绍了NumPy中关于数组形状变换的方法,包括如何使用`shape`属性改变数组形状,利用`flat`、`flatten`和`ravel`进行一维化操作,以及`reshape`函数的使用。此外,还讲解了数组的转置操作`T`和`transpose`函数,以及通过`np.newaxis`改变数组维度。这些知识对于理解和操作NumPy数组至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

更改形状

在对数组进行操作时,为了满足格式和计算的要求通常会改变其形状。

numpy.ndarray.shape表示数组的维度,返回一个元组,这个元组的长度就是维度的数目,即 ndim 属性(秩)。
【例】通过修改 shape 属性来改变数组的形状。

import numpy as np

x=np.array([1,2,3,4,5,6,7,8])
print(x.shape) # (8,)
x.shape=[2,4]
print(x)
'''
[[1 2 3 4]
 [5 6 7 8]]
'''

numpy.ndarray.flat 将数组转换为一维的迭代器,可以用for访问数组每一个元素。
【例】

import numpy as np

x = np.array([[11, 12, 13, 14, 15],
              [16, 17, 18, 19, 20],
              [21, 22, 23, 24, 25],
              [26, 27, 28, 29, 30],
              [31, 32, 33, 34, 35]])
y=x.flat
print(y)
# <numpy.flatiter object at 0x0000026582447C10>
for i in y:
    print(i,end=' ')
# 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 

y[3]=0
print(end='\n')
print(x)
'''
[[11 12 13  0 15]
 [16 17 18 19 20]
 [21 22 23 24 25]
 [26 27 28 29 30]
 [31 32 33 34 35]]
'''

numpy.ndarray.flatten([order=‘C’]) 将数组的副本转换为一维数组,并返回。
order:‘C’ – 按行,‘F’ – 按列,‘A’ – 原顺序,‘k’ – 元素在内存中的出现顺序。(简记)
order:{'C / F,'A,K},可选使用此索引顺序读取a的元素。'C’意味着以行大的C风格顺序对元素进行索引,最后一个轴索引会更改F表示以列大的Fortran样式顺序索引元素,其中第一个索引变化最快,最后一个索引变化最快。请注意,'C’和’F’选项不考虑基础数组的内存布局,仅引用轴索引的顺序.A’表示如果a为Fortran,则以类似Fortran的索引顺序读取元素在内存中连续,否则类似C的顺序。“ K”表示按照步序在内存中的顺序读取元素,但步幅为负时反转数据除外。默认情况下,使用Cindex顺序。
【例】flatten()函数返回的是拷贝。

import numpy as np

x = np.array([[11, 12, 13, 14, 15],
              [16, 17, 18, 19, 20],
              [21, 22, 23, 24, 25],
              [26, 27, 28, 29, 30],
              [31, 32, 33, 34, 35]])
y=x.flatten()
print(y)
'''
[11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
 35]
'''
y[3]=0
print(x)
'''
[[11 12 13 14 15]
 [16 17 18 19 20]
 [21 22 23 24 25]
 [26 27 28 29 30]
 [31 32 33 34 35]]
'''

x = np.array([[11, 12, 13, 14, 15],
              [16, 17, 18, 19, 20],
              [21, 22, 23, 24, 25],
              [26, 27, 28, 29, 30],
              [31, 32, 33, 34, 35]])

y = x.flatten(order='F')
print(y)
# [11 16 21 26 31 12 17 22 27 32 13 18 23 28 33 14 19 24 29 34 15 20 25 30
#  35]

y[3] = 0
print(x)
# [[11 12 13 14 15]
#  [16 17 18 19 20]
#  [21 22 23 24 25]
#  [26 27 28 29 30]
#  [31 32 33 34 35]]

【例】ravel()返回的是视图。

import numpy as np

x = np.array([[11, 12, 13, 14, 15],
              [16, 17, 18, 19, 20],
              [21, 22, 23, 24, 25],
              [26, 27, 28, 29, 30],
              [31, 32, 33, 34, 35]])
y=np.ravel(x)
print(y)
'''
[11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
 35]
'''
y[3]=0
print(x)
'''
[[11 12 13  0 15]
 [16 17 18 19 20]
 [21 22 23 24 25]
 [26 27 28 29 30]
 [31 32 33 34 35]]
'''
【例】order=F 就是拷贝

x = np.array([[11, 12, 13, 14, 15],
              [16, 17, 18, 19, 20],
              [21, 22, 23, 24, 25],
              [26, 27, 28, 29, 30],
              [31, 32, 33, 34, 35]])

y = np.ravel(x, order='F')
print(y)
# [11 16 21 26 31 12 17 22 27 32 13 18 23 28 33 14 19 24 29 34 15 20 25 30
#  35]

y[3] = 0
print(x)
# [[11 12 13 14 15]
#  [16 17 18 19 20]
#  [21 22 23 24 25]
#  [26 27 28 29 30]
#  [31 32 33 34 35]]

reshape()函数当参数newshape = [rows,-1]时,将根据行数自动确定列数。

import numpy as np

x=np.arange(12)
y=np.reshape(x,[3,4])
print(y.dtype) # int32
print(y) 
'''
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]'''

y=np.reshape(x,[3,-1])
print(y)
'''
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]'''

y=np.reshape(x,[-1,3])
print(y)
'''
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]'''

y[0,1]=10
print(x)
# [ 0 10  2  3  4  5  6  7  8  9 10 11]
# (改变x去reshape后y中的值,x对应元素也改变)

【例】reshape()函数当参数newshape = -1时,表示将数组降为一维。

import numpy as np

x=np.random.randint(12,size=[2,2,3])
print(x)
'''
[[[7 5 5]
  [7 3 9]]

 [[4 6 9]
  [2 8 4]]]'''
y=np.reshape(x,-1)
print(y)
# [7 5 5 7 3 9 4 6 9 2 8 4]

数组转置

import numpy as np

x=np.array([
[1,2,3,4,5],
[6,7,8,9,10],
[11,12,13,14,15]])
print(x)
'''
[[ 1  2  3  4  5]
 [ 6  7  8  9 10]
 [11 12 13 14 15]]'''
y=x.T
print(y)
'''
[[ 1  6 11]
 [ 2  7 12]
 [ 3  8 13]
 [ 4  9 14]
 [ 5 10 15]]'''
z=np.transpose(x)
print(z)
'''
[[ 1  6 11]
 [ 2  7 12]
 [ 3  8 13]
 [ 4  9 14]
 [ 5 10 15]]'''

更改维度

import numpy as np

x=np.array([1,2,9,4,5,6,7,8])
print(x.shape) # (8,)
print(x) # [1 2 9 4 5 6 7 8]

y=x[np.newaxis,:]
print(y.shape) # (1, 8)
print(y) 

y = x[:, np.newaxis]
print(y.shape)  # (8, 1)
print(y)
'''
[[1]
 [2]
 [9]
 [4]
 [5]
 [6]
 [7]
 [8]]'''
### Python NumPy 数组操作教程 #### 添加元素至数组 对于向PythonNumPy数组中添加元素的操作,最简便的方式是在现有数组末尾追加新元素。这可以通过调用`np.append()`函数完成,该函数接收待修改的原始数组与欲添加的新元素作为参数[^3]。 ```python import numpy as np arr = np.array([1, 2, 3, 4, 5]) print("原始数组:", arr) new_arr = np.append(arr, 6) print("新数组:", new_arr) ``` 上述代码展示了如何创建一个初始含有五个整数的数组,并通过`append()`方法在其末端加入数值6,最终打印出更新后的数组内容。 #### 展平多维数组 当处理多维数据结构时,有时需要将其转换为一维形式以便进一步分析或简化运算逻辑。为此目的,NumPy提供了两种途径——`flatten`和`ravel`方法。两者都能把一个多维的数据集压缩成单一维;不过它们之间存在细微差别: - `flatten`: 总是返回一个新的副本,在任何情况下都不会影响源数据; - `ravel`: 尽可能地返回输入数组的一个视图(view),只有在无法做到这一点的时候才会复制数据[^4]。 下面的例子说明了这两种方式的具体应用: ```python multi_dim_array = np.array([[1, 2], [3, 4]]) flattened_copy = multi_dim_array.flatten() view_or_copy = multi_dim_array.ravel() print("使用 flatten 方法得到的一维数组:", flattened_copy) print("使用 ravel 方法得到的结果:", view_or_copy) ``` 这段脚本先定义了一个二维矩阵,接着分别运用`flatten`和`ravel`对其进行降维处理并输出结果。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据攻城小狮子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值