python:由已知数组快速生成新数组-numpy

这篇博客主要介绍了在numpy环境下,如何根据已知数组和不同条件生成新数组或子数组。包括根据筛选条件生成子数组的两种情况以及三种变换条件生成与原数组shape相同的新数组的方法,并给出了具体的实例和运行结果。

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

需求描述

在利用numpy进行数据分析时,常有的一个需求是:根据已知的数组生成新数组。这个问题又可以分为两类:

  1. 根据筛选条件生成子数组;
  2. 根据变换条件生成新数组(新数组shape与原数组相同)

下面简单总结.

生成子数组

情况1

已知数组a,以及若干筛选条件conds,要求从数组a中生成一个子数组b。

解决办法:b=a[conds]。比如b=a[a>0],b=a[(a>=1)|(a<=-2)], b=a[(a>=1)&(a<=3)]

实例:如下

# 实例1.1:已知数组a,要求找出所有a>0的元素,然后生成一个新数组。
a = np.arange(-5,5,1)
print('原数组a:',a)
b = a[a>0]
print('实例1结果:',b)

# 实例1.2:已知数组a,要求找出所有a>=1或a<=-2的元素,然后生成一个新数组。
b = a[(a>=1) | (a<=-2)]
print('实例2结果:',b)

# 实例1.3:已知数组a,要求找出所有a>=1并且a<=3的元素,然后生成一个新数组。
b = a[(a>=1) & (a<=3)]
print('实例3结果:',b)

运行结果:

原数组a: [-5 -4 -3 -2 -1  0  1  2  3  4]
实例1结果: [1 2 3 4]
实例2结果: [-5 -4 -3 -2  1  2  3  4]
实例3结果: [1 2 3]

情况2

已知数组a和数组b(shape相同),以及对数组a的筛选条件conds_a。要求从数组b中生成一个子数组c,其中的元素id,与满足筛选条件的数组a的元素id一一对应。

解决办法:

c = b[conds_a],比如c = b[(a>=1) & (a<=3)]

实例:如下

a = np.arange(-5,5,1)
b = np.arange(-50,50,10)
print('数组a:',a)
print('数组b:',b)

c =  b[(a>=1) & (a<=3)]
print('新数组c:', c)

运行结果:

数组a: [-5 -4 -3 -2 -1  0  1  2  3  4]
数组b: [-50 -40 -30 -20 -10   0  10  20  30  40]
新数组c: [10 20 30]

变换成新数组

已知数组a,以及若干变换条件conds,要求生成一个新数组b(与原数组shape相同)。解决办法:

  • 方法1:np.where(where(condition, [x, y]))
    使用场景:当变换条件只有两个以下时,比如实例2.1。该方法等价于:if condition x else y

  • 方法2: np.select(condlist, choicelist, default=0)
    使用场景:当变换条件有任意多个时,比如实例2.2。该方法等价于:

if condlist[0]:
    choicelist[0]
elif condilist[1]:
    choicelist[1]
...
else:
    default
  • 方法3:np.piecewise(x, condlist, funclist, *args, **kw)
    使用场景:同方法2,只不过变换条件较复杂,无法直接写出,要用函数来表示。

实例:如下

# 实例2.1:已知数组a,要求对所有a<0的元素取绝对值,对其他元素设为0,然后生成一个新数组
a = np.arange(-5,5,1)
print(a)
b = np.where(a<0, abs(a),0)
print('实例2.1结果:',b)

# 实例2.2:已知数组a,要求对所有a<0的元素取绝对值,对a=0的元素+100,对a>0的元素平方,然后生成一个新数组
b = np.select([a<0, a==0, a>0], [abs(a), a+100, a**2])
print('实例2.2结果:',b)

运行结果:

[-5 -4 -3 -2 -1  0  1  2  3  4]
实例2.1结果: [5 4 3 2 1 0 0 0 0 0]
实例2.2结果: [5 4 3 2 1 100 1 4 916]
### 如何在 Python 中使用 NumPy 初始化数组 NumPy 是一种强大的科学计算库,广泛用于处理多维数组和矩阵运算。以下是几种常见的 NumPy 数组初始化方法: #### 使用固定值初始化 可以通过指定形状和数据类型来创建具有相同初始值的数组。例如,可以创建一个填充零或一的数组。 ```python import numpy as np # 创建一个 3x4 的全零数组 zeros_array = np.zeros((3, 4)) print(zeros_array) # 创建一个 2x3 的全一阵列 ones_array = np.ones((2, 3), dtype=np.int32) print(ones_array) ``` 这些函数分别返回由零[^1]和一组成的数组,适用于需要预分配内存的情况。 #### 使用特定范围的值初始化 如果希望生成一系列连续数值,则可以利用 `arange` 或 `linspace` 函数实现。 ```python # arange 类似于内置 range 函数,但返回 ndarray 而不是列表 range_array = np.arange(0, 10, 2) # 从 0 到 10(不包括),步长为 2 print(range_array) # linspace 可以生成均匀分布的 N 个数,在给定区间内 linear_space = np.linspace(0, 1, 5) # 在 [0, 1] 上生成五个点 print(linear_space) ``` 上述代码展示了如何通过定义起始值、终止值以及间隔或者数量来自动生成序列。 #### 随机数初始化 很多时候我们需要随机生成一些测试数据集,这时就可以借助 NumPy 提供的各种随机模块完成任务。 ```python # Random values from uniform distribution over [0, 1) random_uniform = np.random.rand(2, 3) print(random_uniform) # Random integers within specified low (inclusive) up to high(exclusive). random_integers = np.random.randint(low=0, high=10, size=(3,)) print(random_integers) ``` 这里介绍了两种方式产生随机浮点数与整型数的方法[^2]。 #### 自定义输入构建向量/矩阵 当已知确切的数据源时可以直接传入到 constructor 方法里形成新的实例对象。 ```python custom_list = [[1, 2], [3, 4]] array_from_list = np.array(custom_list, dtype=float) print(array_from_list) ``` 此片段说明了怎样把现有的嵌套列表转换成 float 型别的二维 NDArray 实体。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值