如何使用numpy在一行中创建大小为10但第五个值为1的空向量

0h4hbjxa  于 2022-12-13  发布在  其他
关注(0)|答案(8)|浏览(468)

对于numpy模块,我可以用两行代码来完成:

x=np.zeros(10)
x[4]=1

但是,我想知道是否有可能将两者结合在一起

wkftcu5l

wkftcu5l1#

有多种方法可以做到这一点。例如,np.arange(10) == 4给出了一个包含所有False值的数组,除了位置4处的一个True
NumPy的bool值实际上是01实际上是uint8(就像Python的bool值是01一样,尽管它是唯一的整型),所以你可以在任何表达式中直接使用它:

>>> 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

>>> (np.arange(10) == 4).view(np.uint8)
array([0, 0, 0, 0, 1, 0, 0, 0, 0, 0], dtype=uint8)

...或者,如果您想要正常的int值,您可以将其转换为:

>>> (np.arange(10) == 4).astype(int)

数组([0,0,0,0,1,0,0,0,0,0])
如此等等。
然而,这看起来可读性差了很多,而且在快速测试中也慢了大约20%,所以除非你是为了代码高尔夫的原因而这样做,为什么呢?

a5g8bdjr

a5g8bdjr2#

x = numpy.array([0,0,0,0,1,0,0,0,0,0])

:P

svujldwt

svujldwt3#

b=np.array([int(x==4) for x in range(10)])
print(b)

[0 0 0 0 1 0 0 0 0 0]
wixjitnu

wixjitnu4#

使用此np.where(np.arange(10)==4,1,0)

lnxxn5zx

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,因此失败。零数组中的xelement 4都被赋值为1
因此,我们需要先创建一个0的数组,然后再赋值给元素element 4赋值给1,而这两个操作不能在一行中完成。

bybem2ql

bybem2ql6#

如果需要对多个元素执行此操作:

my_vect = np.zeros(42)
# set index 1 and 3 to value 1
my_vect[np.array([1,3])] = 1
fhity93d

fhity93d7#

创建大小为10的空向量,但第五个值为1。

import numpy
x = np.zeros(10, dtype=int)
if x[5] == 0:
   x[5] = 1  
print(x)
zlwx9yxi

zlwx9yxi8#

array = numpy.eye( array_size )[ element_in_array_which_should_be_1 - 1 ]

因此,要创建大小为10的空向量,但一行中的第五个值为1,则为

array = numpy.eye( 10 ) [ 5 - 1 ]

1.数组中的所有元素都是空的。
:)

相关问题