numpy 入门

– 生成0-9数组

a=np.arange(10)
a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

– numpy 去重 去重的下标

a=np.array([11,11,12,13,14,15,16,17,12,13,14,15,18,19,20])
a
array([11, 11, 12, 13, 14, 15, 16, 17, 12, 13, 14, 15, 18, 19, 20])

unique_value=np.unique(a)
unique_value
array([11, 12, 13, 14, 15, 16, 17, 18, 19, 20])

unique_value,indices_list=np.unique(a,return_index=True)
unique_value
array([11, 12, 13, 14, 15, 16, 17, 18, 19, 20])

indices_list
array([ 0, 2, 3, 4, 5, 6, 7, 12, 13, 14], dtype=int32)

–翻转数组

np.flip(a)
array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])

a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

– 统计数量

unique_values,occurrence_count=np.unique(a,return_counts=True)
occurrence_count
array([2, 2, 2, 2, 2, 1, 1, 1, 1, 1])

a
array([11, 11, 12, 13, 14, 15, 16, 17, 12, 13, 14, 15, 18, 19, 20])

– bool索引

a>15
array([False, False, False, False, False, False, True, True, False,
False, False, False, True, True, True])

a[a>15]
array([16, 17, 18, 19, 20])

–更改维度 查看大小和维度属性

b=a.reshape(5,3)
a.size
15

b
array([[11, 11, 12],
[13, 14, 15],
[16, 17, 12],
[13, 14, 15],
[18, 19, 20]])

np.flip(b)
array([[20, 19, 18],
[15, 14, 13],
[12, 17, 16],
[15, 14, 13],
[12, 11, 11]])

np.flip(b,axis=0)
array([[18, 19, 20],
[13, 14, 15],
[16, 17, 12],
[13, 14, 15],
[11, 11, 12]])

np.flip(b,axis=1)
array([[12, 11, 11],
[15, 14, 13],
[12, 17, 16],
[15, 14, 13],
[20, 19, 18]])

b[1] = np.flip(b[2])
b
array([[11, 11, 12],
[12, 17, 16],
[16, 17, 12],
[13, 14, 15],
[18, 19, 20]])

b[:,1] = np.flip(b[:,1])
b
array([[11, 19, 12],
[12, 14, 16],
[16, 17, 12],
[13, 17, 15],
[18, 11, 20]])

b=a.reshape(5,3)
a.size
15

a.shape
(15,)

b.shape
(5, 3)

b.dtype
dtype(‘int32’)

b.ndim
2

b.transpose()
array([[11, 13, 16, 13, 18],
[11, 14, 17, 14, 19],
[12, 15, 12, 15, 20]])

b.T
array([[11, 13, 16, 13, 18],
[11, 14, 17, 14, 19],
[12, 15, 12, 15, 20]])

– 切片

b[np.array([0,2,4]),1:3]
array([[11, 12],
[17, 12],
[19, 20]])

– np.newaxis增加维度

b[:,np.newaxis,:].shape
(5, 1, 3)

b[:,np.newaxis,:]
array([[[11, 11, 12]],

   [[12, 17, 16]],

   [[16, 17, 12]],

   [[13, 14, 15]],

   [[18, 19, 20]]])

b
array([[11, 11, 12],
[12, 17, 16],
[16, 17, 12],
[13, 14, 15],
[18, 19, 20]])

x=np.arange(5)
x
array([0, 1, 2, 3, 4])

x[:,np.newaxis] +x[np.newaxis,:]
array([[0, 1, 2, 3, 4],
[1, 2, 3, 4, 5],
[2, 3, 4, 5, 6],
[3, 4, 5, 6, 7],
[4, 5, 6, 7, 8]])

– … 选择其余未定义的维度

z = np.arange(81).reshape(3,3,3,3)
z[1,…,2]
array([[29, 32, 35],
[38, 41, 44],
[47, 50, 53]])

indices=(1,1,1,slice(0,2)) #same as (1,1,1,0:2)
z[indices]
array([39, 40])

indices=(1,Ellipsis,1) #same as (1,…,1)
z[indices]
array([[28, 31, 34],
[37, 40, 43],
[46, 49, 52]])

– 转成一维数组 flatten 创建新数组 更改不影响原数据 ravel只建视图

x=np.arange(1,13).reshape((3,4))
x
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])

x.flatten()
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

x
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])

a1=x.flatten()
a1[0]=99
x
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])

a1
array([99, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

a2=x.ravel()
a2[0]=99
a2
array([99, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

x
array([[99, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])

–赋值

x=np.arange(10)
x[2:7]=1
x
array([0, 1, 1, 1, 1, 1, 1, 7, 8, 9])

x[2:7]=np.arange(5)
x
array([0, 1, 0, 1, 2, 3, 4, 7, 8, 9])

x[1]=1.2
x
array([0, 1, 0, 1, 2, 3, 4, 7, 8, 9])

x=np.arange(0,50,10)
x
array([ 0, 10, 20, 30, 40])

x[np.array([1,2,3,1])]+=1
x
array([ 0, 11, 21, 31, 40])

广播描述了numpy在算术运算期间如何处理具有不同形状的数组。受到某些约束,较小的阵列在较大的阵列上’广播’,以使它们具有兼容的形状。

x
array([1., 1., 1., 1., 1.])

y
array([1., 1., 1., 1., 1.])

x=np.arange(4)
x+y
Traceback (most recent call last):
File “”, line 1, in
ValueError: operands could not be broadcast together with shapes (4,) (5,)

xx
array([[0],
[1],
[2],
[3]])

y
array([1., 1., 1., 1., 1.])

xx+y
array([[1., 1., 1., 1., 1.],
[2., 2., 2., 2., 2.],
[3., 3., 3., 3., 3.],
[4., 4., 4., 4., 4.]])

– newaxis索引运算符将一个新轴插入a,使其成为二维4x1数组。将4x1数组与b形状为的组合会(3,)生成一个4x3数组

a=np.array([0,10,20,30])
b=np.arange(1,4)
a[:,np.newaxis]+b
array([[ 1, 2, 3],
[11, 12, 13],
[21, 22, 23],
[31, 32, 33]])

https://numpy.org/doc/stable/user/basics.broadcasting.html

### NumPy 基础入门 #### 导入 NumPy 包 为了使用 NumPy 的功能,首先需要导入该库。通常情况下,会将其重命名为 `np` 以便于后续调用。 ```python import numpy as np ``` 这使得可以在整个程序中通过前缀 `np.` 来访问 NumPy 提供的各种函数和对象[^1]。 #### 创建 NumPy 数组 NumPy 中最基本的数据结构是 ndarray (n-dimensional array),即多维数组。可以通过多种方式来创建这些数组: - **从 Python 列表转换** 可以直接利用现有的列表数据构建 NumPy 数组 ```python list_data = [1, 2, 3] np_array = np.array(list_data) ``` - **内置函数生成** 使用特定模式自动生成数值序列或特殊矩阵 ```python # arange 函数用于生成等差数列并自动形成一维数组 sequence = np.arange(0, 10, 2) # 起始值为0,结束值小于10,步长为2 print(sequence) # reshape 方法可以改变现有数组的形状而不修改其内容 reshaped_sequence = sequence.reshape((2, -1)) print(reshaped_sequence) ``` 上述例子展示了如何创建一个简单的二维数组,并对其进行重塑操作[^2]。 #### 多维数组的操作 对于更复杂的场景,比如处理图像或其他形式的网格化数据时,可能需要用到更高维度的数组。下面的例子演示了基于条件筛选子集的方法: ```python x = np.arange(16).reshape((4, -1)) filtered_x = x[x[:, 3] % 3 == 0] print(filtered_x) ``` 这里先创建了一个四行四列的整型数组,接着根据第三列元素能否被三整除作为过滤条件获取符合条件的行向量集合[^3]。 #### 文件存取支持 除了内存中的计算外,有时还需要将 ndarrays 存储至磁盘或者加载已有的二进制文件。为此,提供了简便易用的 I/O 接口: ```python # 将数组保存成 .npy 格式的文件 file_path = 'example.npy' data_to_save = np.random.rand(5, 5) np.save(file=file_path, arr=data_to_save) # 加载之前保存过的 .npy 文件回到内存中 loaded_data = np.load(file_path) print(loaded_data) ``` 此过程不仅简化了持久化的流程,而且保持了原始数据类型的完整性[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值