相关疑难解决方法(0)

Python:根据数组中的值拆分NumPy数组

我有一个大阵列:

[(1.0, 3.0, 1, 427338.4297000002, 4848489.4332)
 (1.0, 3.0, 2, 427344.7937000003, 4848482.0692)
 (1.0, 3.0, 3, 427346.4297000002, 4848472.7469) ...,
 (1.0, 1.0, 7084, 427345.2709999997, 4848796.592)
 (1.0, 1.0, 7085, 427352.9277999997, 4848790.9351)
 (1.0, 1.0, 7086, 427359.16060000006, 4848787.4332)]
Run Code Online (Sandbox Code Playgroud)

我想根据数组中的第二个值(3.0,3.0,3.0 ...... 1.0,1.0,10)将此数组拆分为多个数组.

每次第二个值改变时,我想要一个新数组,所以基本上每个新数组都有相同的第二个值.我已经在Stack Overflow上看了这个,知道命令

np.split(array, number)
Run Code Online (Sandbox Code Playgroud)

但我不是试图将数组拆分为一定数量的数组,而是将其拆分为一个值.我怎样才能以上面指定的方式拆分数组?任何帮助,将不胜感激!

python arrays split numpy

14
推荐指数
1
解决办法
1万
查看次数

相交多个2D np阵列以确定区域

使用这个可重复的小例子,我到目前为止还无法从3个数组生成一个新的整数数组,这些数组包含所有三个输入数组的唯一分组.

这些数组与地形属性有关:

import numpy as np
asp = np.array([8,1,1,2,7,8,2,3,7,6,4,3,6,5,5,4]).reshape((4,4))  #aspect
slp = np.array([9,10,10,9,9,12,12,9,10,11,11,9,9,9,9,9]).reshape((4,4))  #slope
elv = np.array([13,14,14,13,14,15,16,14,14,15,16,14,13,14,14,13]).reshape((4,4)) #elevation
Run Code Online (Sandbox Code Playgroud)

我们的想法是使用GIS例程将地理轮廓分解为3个不同的属性:

  • 方位1-8(1 =朝北,2 =东北朝向等)
  • 坡度为9-12(9 =缓坡... 12 =最陡斜坡)
  • 海拔13-16(13 =最低海拔... 16 =最高海拔)

下面的小图试图描绘我所追求的结果类型(数组显示在左下方).请注意,图中给出的"答案"只是一个可能的答案.只要最终数组在每个行/列索引处包含一个标识唯一分组的整数,我就不关心结果数组中整数的最终排列.

例如,[0,1]和[0,2]处的数组索引具有相同的方面,斜率和高程,因此在结果数组中接收相同的整数标识符.

是否numpy的有一个内置的例程这种事情?

数组合图形

python numpy multidimensional-array numpy-ndarray

8
推荐指数
1
解决办法
274
查看次数

NumPy 将函数应用于与另一个 numpy 数组对应的行组

我有一个 NumPy 数组,每行代表一些 (x, y, z) 坐标,如下所示:

a = array([[0, 0, 1],
           [1, 1, 2],
           [4, 5, 1],
           [4, 5, 2]])
Run Code Online (Sandbox Code Playgroud)

我还有另一个 NumPy 数组,其中包含该数组的 z 坐标的唯一值,如下所示:

b = array([1, 2])
Run Code Online (Sandbox Code Playgroud)

如何将函数(我们称之为“f”)应用于 a 中与 b 中的值相对应的每个行组?例如,b 的第一个值是 1,因此我将获取 a 中 z 坐标为 1 的所有行。然后,我将一个函数应用于所有这些值。

最后,输出将是一个与 b 形状相同的数组。

我正在尝试对其进行矢量化以使其尽可能快。谢谢!

预期输出示例(假设 f 是 count()):

c = array([2, 2])
Run Code Online (Sandbox Code Playgroud)

因为数组 a 中有 2 行,数组 b 中的 z 值为 1,数组 a 中有 2 行,数组 b 中的 z 值为 2。

一个简单的解决方案是像这样迭代数组 b:

for val in b: …
Run Code Online (Sandbox Code Playgroud)

python numpy

3
推荐指数
1
解决办法
835
查看次数

如何对 numpy ndarray 进行分组并从每个组返回第一行。现在排序之前

我有 ndarray:

[[1 1]
 [0 2]
 [0 3]
 [1 4]
 [1 5]
 [0 6]
 [1 7]]
Run Code Online (Sandbox Code Playgroud)

我期望这样的减少结果:

[[1 1]
  [0 2]
  [1 4]
  [0 6]
  [1 7]]
Run Code Online (Sandbox Code Playgroud)

结果 ndarray 应包含每组的第一行。我根据第 0 列中的值构建一个组。这是值 0 或 1。

类似的问题在线程中得到解决:Is there any numpy group by function? 但钥匙已排序,在我的情况下它不起作用。

l1 = [1,0,0,1,1,0,1]
l2 = [1,2,3,4,5,6,7]
a = np.array([l1, l2]).T
print(a)
values, indexes = np.unique(a[:, 0], return_index=True)
Run Code Online (Sandbox Code Playgroud)

在 pandas 中,我们可以通过(来自堆栈的解决方案,但我不记得所有者,抱歉没有链接)来实现这一点:

m1 = ( df['c0'] != df['c0'].shift(1)).cumsum()
df = df.groupby([df['c0'], m1]).head(1)
Run Code Online (Sandbox Code Playgroud)

如何用numpy制作它?

谢谢您的解决方案。

编辑:

当 mozway 编写解决方案时,我创建了类似的东西: …

python numpy pandas

1
推荐指数
1
解决办法
173
查看次数