Numpy将所有索引设置为值[重复]

问题描述 投票:0回答:3

这个问题在这里已有答案:

我有一个numpy ndarray a = np.ndarray((3,3)),我希望所有的索引都以相同的值开始,例如5:

array([[5., 5., 5.],
       [5., 5., 5.],
       [5., 5., 5.]])

注意:我发布了这种问答风格,因为每次我查看它时,我总会找到一堆关于复杂切片的随机问题,但不是一次性抛出所有内容的简单示例。希望下次我搜索这个问题时会出现更直接的结果。但我也希望其他人有我可以采纳的好主意。

python numpy numpy-ndarray
3个回答
1
投票

有几种方法可以实现这一目标,但我认为重点是分析哪种方法可以为您提供最佳结果:

In[1]: %timeit np.ones((3,3)) * 5
6.82 µs ± 374 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)    
In[2]: %%timeit
       np.ndarray((3,3))
       a[:] = 5
1.96 µs ± 29.4 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

In[3]: %timeit np.full((3, 3), 5)
4.13 µs ± 59.3 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

因此,可能最好的方法是创建数组并将值5分配给所有元素,这意味着使用第二个选项。


1
投票

以下是一些可靠的方法:

# Use the function built for this very purpose
>>> a = np.full((3, 3), 5)
>>> a
array([[5., 5., 5.],
       [5., 5., 5.],
       [5., 5., 5.]])

要么

# [:] is shorthand for every index.
>>> a = np.ndarray((3,3))
>>> a[:] = 5
>>> a
array([[5., 5., 5.],
       [5., 5., 5.],
       [5., 5., 5.]])

要么

# multiply a single value over every index (currently all 1s)
>>> a = np.ones((3,3)) * 5   
>>> a
array([[5., 5., 5.],
       [5., 5., 5.],
       [5., 5., 5.]])

有关索引的详细信息和复杂索引/切片示例,请查看documentation


1
投票

我似乎有另一种方法,只需使用加号运算符:

>>> import numpy as np
>>> a = np.zeros((3,3))
>>> a
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])
>>> a + 5
array([[ 5.,  5.,  5.],
       [ 5.,  5.,  5.],
       [ 5.,  5.,  5.]])
>>> 

(P.S使用zeros而不是ndarray

© www.soinside.com 2019 - 2024. All rights reserved.