Python numpy.arange返回的数组的多个副本?

Python numpy.arange返回的数组的多个副本?,python,numpy,Python,Numpy,我试图用一个像素图像的所有x坐标的列表填充一个numpy数组。所以基本上,nxm图像将具有n1,n2,依此类推,直到nm。有没有一种简单的方法来填充numpy数组,从而实现这种情况 到目前为止,我已经考虑过使用numpy.concatenate,但是要单独列出每个数组似乎非常乏味,而且我还是会使用一个循环,这并没有什么帮助numpy.flatte也会找到,但我必须先生成网格。有什么简单的解决方案吗?总是有常用的网格创建功能mgrid(): (PS:DSM的numpy.index(image.sh

我试图用一个像素图像的所有x坐标的列表填充一个numpy数组。所以基本上,
nxm
图像将具有
n
1
n
2
,依此类推,直到
n
m
。有没有一种简单的方法来填充numpy数组,从而实现这种情况


到目前为止,我已经考虑过使用
numpy.concatenate
,但是要单独列出每个数组似乎非常乏味,而且我还是会使用一个循环,这并没有什么帮助
numpy.flatte
也会找到,但我必须先生成网格。有什么简单的解决方案吗?

总是有常用的网格创建功能
mgrid()

(PS:DSM的
numpy.index(image.shape)
更简单,如果
m
n
image
的维度)

如果需要浮点坐标,则更通用的“复杂步长”形式将以有效的方式提供它们

numpy.mgrid[:m:(m+1)*1j, :n:(n+1)*1j]  # m+1 values from 0 to m, n+1 values from 0 to n
(另一个选项是将float
1.
添加到第一个表单,但这将不必要地首先创建一个整数数组)

如果您只需要一个坐标,这会有点浪费,因为
mgrid[]
也会为另一个坐标创建类似的网格(
mgrid[]
这里有两个元素)


在某些情况下,使用低内存占用可能更为有效,在这种情况下,它会创建自动广播的行和列,以覆盖二维网格。它们只使用很少的内存这一事实也可以加快速度(更少的内存访问)。

如果你的
image.shape
(n,m)
,那么x坐标是:

np.repeat(np.arange(m), n)
例如:

In [5]: n, m = 4, 3

In [6]: np.repeat(np.arange(m), n)
Out[6]: array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2])
当然,y坐标是

np.repeat(np.arange(n), m)
您可能希望对第二个坐标使用
np.tile

np.tile(np.arange(n), m)
然后,您就可以将其压缩并获得所有像素的坐标:

In [9]: np.repeat(np.arange(m), n)
Out[9]: array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2])

In [10]: np.tile(np.arange(n), m)
Out[10]: array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3])

请注意,这基本上是EOL的
mgrid
解决方案的扁平化版本。

谢谢!我实际上也需要y坐标,我只是觉得这两个轴的坐标是一样的!我可以使用
np.index(image\u obj.shape)
来代替。(顺便说一句,你确定语法吗?
mgrid
不是方括号中的一个吗?)np.index听起来很适合我的要求,但我还需要能够将浮点作为坐标。是的,mgrid是方括号中的一个()@Imagine:因为“您还需要能够将浮点数作为坐标”,我添加了一种有效的方法来处理这种情况。@想象是的,有一种简单的方法可以像处理列表一样对数组进行“多重处理”;它使用
np.repeat
和/或
np.tile
,这是我在回答中给出的解决方案。如果需要平面阵列,这是一种非常好的方法<如果需要,code>ndarray.reformate()可以“取消”生成的数组。是的,但我认为如果需要重新生成的数组,@EOL的mgrid可能更好。我使用扁平化版本是因为@Imagine的问题暗示需要扁平化数组,称之为
列表
,并说如果他们能先生成网格,他们会使用
np。扁平化
。@askewchan:也谢谢你的回答,我最后两个都用了!(每种都适用于不同的事物)
In [9]: np.repeat(np.arange(m), n)
Out[9]: array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2])

In [10]: np.tile(np.arange(n), m)
Out[10]: array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3])