对于numpy模块,我可以用两行代码来完成:
x=np.zeros(10) x[4]=1
但是,我想知道是否有可能将两者结合在一起
wkftcu5l1#
有多种方法可以做到这一点。例如,np.arange(10) == 4给出了一个包含所有False值的数组,除了位置4处的一个True。NumPy的bool值实际上是0,1实际上是uint8(就像Python的bool值是0和1一样,尽管它是唯一的整型),所以你可以在任何表达式中直接使用它:
np.arange(10) == 4
False
True
bool
0
1
uint8
>>> np.arange(10) == 4 array([False, False, False, False, True, False, False, False, False, False], dtype=bool) >>> np.arange(10) * 1 array([0, 0, 0, 0, 1, 0, 0, 0, 0, 0]) >>> np.arange(10) + 23 array([23, 23, 23, 23, 24, 23, 23, 23, 23, 23])
...或将view转换为uint8,而不是bool:
view
>>> (np.arange(10) == 4).view(np.uint8) array([0, 0, 0, 0, 1, 0, 0, 0, 0, 0], dtype=uint8)
...或者,如果您想要正常的int值,您可以将其转换为:
int
>>> (np.arange(10) == 4).astype(int)
数组([0,0,0,0,1,0,0,0,0,0])如此等等。然而,这看起来可读性差了很多,而且在快速测试中也慢了大约20%,所以除非你是为了代码高尔夫的原因而这样做,为什么呢?
a5g8bdjr2#
x = numpy.array([0,0,0,0,1,0,0,0,0,0])
:P
svujldwt3#
b=np.array([int(x==4) for x in range(10)]) print(b) [0 0 0 0 1 0 0 0 0 0]
wixjitnu4#
使用此np.where(np.arange(10)==4,1,0)
np.where(np.arange(10)==4,1,0)
lnxxn5zx5#
我不认为这是可能合并的:
x=np.zeros(10) #1 create an array of values x[4]=1 #2 assign at least one value of an array a different value
在一行中。幼稚:
x = np.zeros(10)[4] = 1 # Fails
由于python处理链接赋值的方式,x的值为1,因此失败。零数组中的x和element 4都被赋值为1。因此,我们需要先创建一个0的数组,然后再赋值给元素element 4赋值给1,而这两个操作不能在一行中完成。
x
element 4
bybem2ql6#
如果需要对多个元素执行此操作:
my_vect = np.zeros(42) # set index 1 and 3 to value 1 my_vect[np.array([1,3])] = 1
fhity93d7#
创建大小为10的空向量,但第五个值为1。
import numpy x = np.zeros(10, dtype=int) if x[5] == 0: x[5] = 1 print(x)
zlwx9yxi8#
array = numpy.eye( array_size )[ element_in_array_which_should_be_1 - 1 ]
因此,要创建大小为10的空向量,但一行中的第五个值为1,则为
array = numpy.eye( 10 ) [ 5 - 1 ]
1.数组中的所有元素都是空的。:)
8条答案
按热度按时间wkftcu5l1#
有多种方法可以做到这一点。例如,
np.arange(10) == 4
给出了一个包含所有False
值的数组,除了位置4处的一个True
。NumPy的
bool
值实际上是0
,1
实际上是uint8
(就像Python的bool
值是0
和1
一样,尽管它是唯一的整型),所以你可以在任何表达式中直接使用它:...或将
view
转换为uint8
,而不是bool
:...或者,如果您想要正常的
int
值,您可以将其转换为:数组([0,0,0,0,1,0,0,0,0,0])
如此等等。
然而,这看起来可读性差了很多,而且在快速测试中也慢了大约20%,所以除非你是为了代码高尔夫的原因而这样做,为什么呢?
a5g8bdjr2#
:P
svujldwt3#
wixjitnu4#
使用此
np.where(np.arange(10)==4,1,0)
lnxxn5zx5#
我不认为这是可能合并的:
在一行中。
幼稚:
由于python处理链接赋值的方式,
x
的值为1
,因此失败。零数组中的x
和element 4
都被赋值为1
。因此,我们需要先创建一个0的数组,然后再赋值给元素
element 4
赋值给1
,而这两个操作不能在一行中完成。bybem2ql6#
如果需要对多个元素执行此操作:
fhity93d7#
创建大小为10的空向量,但第五个值为1。
zlwx9yxi8#
因此,要创建大小为10的空向量,但一行中的第五个值为1,则为
1.数组中的所有元素都是空的。
:)