我有一个大阵列:
[(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)
但我不是试图将数组拆分为一定数量的数组,而是将其拆分为一个值.我怎样才能以上面指定的方式拆分数组?任何帮助,将不胜感激!
使用这个可重复的小例子,我到目前为止还无法从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个不同的属性:
下面的小图试图描绘我所追求的结果类型(数组显示在左下方).请注意,图中给出的"答案"只是一个可能的答案.只要最终数组在每个行/列索引处包含一个标识唯一分组的整数,我就不关心结果数组中整数的最终排列.
例如,[0,1]和[0,2]处的数组索引具有相同的方面,斜率和高程,因此在结果数组中接收相同的整数标识符.
是否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) 我有 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 编写解决方案时,我创建了类似的东西: …