我要新生成一个A,要求必须B列对应的位置是1,能用np.where实现吗
时间: 2024-03-16 18:45:36 浏览: 11
可以使用`np.where`函数实现这个要求。下面是一个示例代码:
```python
import numpy as np
# 假设原始数组是 arr,需要生成一个新数组 A,对应的列是 B
arr = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
B = np.array([0, 1, 0])
# 使用 np.where 函数生成新数组 A
A = np.where(B.reshape(-1, 1), arr, 0)
print(A)
```
输出结果为:
```
[[0 0 0]
[3 4 5]
[0 0 0]]
```
在上面的代码中,`np.where(B.reshape(-1, 1), arr, 0)` 的意思是,将数组 B 转换成一个列向量,然后使用 `np.where` 函数,将 B 中为 1 的位置对应的 arr 中的元素保留,其余位置用 0 填充,生成新的数组 A。
相关问题
我有两个数据,A数列是每天的股价,B数列是0和1组成的数值。我要把对应B列数值是1的时候,把A的数值取出来,生成一个C,能用np
可以使用`np.where`函数和布尔索引来实现这个要求。下面是一个示例代码:
```python
import numpy as np
# 假设 A 数组是每天的股价,B 数组是 0 和 1 组成的数值
A = np.array([10, 12, 11, 13, 14, 15])
B = np.array([0, 1, 1, 0, 1, 0])
# 使用 np.where 和布尔索引生成新数组 C
C = A[B == 1]
print(C)
```
输出结果为:
```
[12 11 14]
```
在上面的代码中,`A[B == 1]` 的意思是,先使用布尔索引 B == 1,生成一个布尔数组,表示对应位置上 B 中的值是否为 1。然后将布尔数组作为索引,从 A 数组中取出对应位置上的值,生成新的数组 C。
idx = np.where(np.random.rand((c.size)) > 0.5)
这行代码是使用 NumPy 库生成一个大小与 c 相同的随机数数组,并返回数组中大于 0.5 的元素的索引。具体来说,`np.random.rand()` 生成一个大小为 c.size 的随机数数组,并返回一个布尔数组,其中元素值为 True 表示对应位置的随机数大于 0.5,否则为 False。`np.where()` 函数会返回满足条件的元素的索引,即大于 0.5 的随机数的索引。最终将这些索引保存在变量 idx 中。