Lio*_*gen 2 python arrays numpy
有没有办法做到以下几点
import numpy as np
x = np.arange(10)
x[2:7] = 1
Run Code Online (Sandbox Code Playgroud)
一行?就像是
x = np.arange(10)[2:7] = 1
Run Code Online (Sandbox Code Playgroud)
使用一衬masking与np.in1d和np.where分配的价值观-
np.where(np.in1d(range(10),range(2,7)), 1, range(10))
Run Code Online (Sandbox Code Playgroud)
样品运行 -
In [28]: np.where(np.in1d(range(10),range(2,7)), 1, range(10))
Out[28]: array([0, 1, 1, 1, 1, 1, 1, 7, 8, 9])
Run Code Online (Sandbox Code Playgroud)
一步一步的运行 -
获取要分配新值的掩码:
In [44]: np.in1d(range(10),range(2,7))
Out[44]: array([False, False, True, True, True, True, \
True, False, False, False], dtype=bool)
Run Code Online (Sandbox Code Playgroud)
使用mask随之np.where在新值(=1)和最初定义的值之间进行选择- range(10):
In [45]: np.where(np.in1d(range(10),range(2,7)), 1, range(10))
Out[45]: array([0, 1, 1, 1, 1, 1, 1, 7, 8, 9])
Run Code Online (Sandbox Code Playgroud)
因此,总而言之,语法基本上是 -
np.where(np.in1d(range(10),range(2,7)), 1, range(10))
^ ^ ^ ^
(1) (2) (3) <--(4)-->
Run Code Online (Sandbox Code Playgroud)
(1)要定义的数组长度.
(2)切片限制.
(3)作为第二步分配的新值.
(4)在定义数组时初始化为数组的值.
这是另一个示例用法 -
In [41]: np.where(np.in1d(range(9),range(2,7)), 99, range(10,19))
Out[41]: array([10, 11, 99, 99, 99, 99, 99, 17, 18])
Run Code Online (Sandbox Code Playgroud)
重现它的原始样式代码将是 -
x = np.arange(10,19)
x[2:7] = 99
Run Code Online (Sandbox Code Playgroud)