gpt4 book ai didi

python - np.where 二维数组

转载 作者:行者123 更新时间:2023-11-28 21:15:26 25 4
gpt4 key购买 nike

我用这些数据创建了一个 numpy 数组:

[[-180.          -80.           20.            1.           10.        ]
[-180. -80. 30.23255814 1. 10. ]
[-180. -80. 40.46511628 1. 10. ]
...,
[ 90. 70. 439.53488372 1. 10. ]
[ 90. 70. 449.76744186 1. 10. ]
[ 90. 70. 460. 1. 10. ]]

然后我运行:

print a[np.where(a[-1])]

我希望这会再次打印整个数组,但它只返回 5 行:

[[-180.          -80.           20.            1.           10.        ]
[-180. -80. 30.23255814 1. 10. ]
[-180. -80. 40.46511628 1. 10. ]
[-180. -80. 50.69767442 1. 10. ]
[-180. -80. 60.93023256 1. 10. ]]

我错过了什么?

数组是这样创建的:

x = np.linspace(-180,90,27)
y = np.linspace(-80,70,30)
z = np.linspace(20,460,44)
a = np.vstack(np.meshgrid(x,y,z,[1],[10])).reshape(5,-1).T

编辑:

这里的目标是识别最后一个元素大于 0 的行。正在对数据进行一些处理,最后一列将被更改。

最佳答案

要回答更新后的问题,您可以:

a[a[..., -1] > 0]

中间步骤示例:

>>> a
array([[4, 0, 3],
[2, 1, 3],
[3, 3, 3],
[4, 2, 2],
[2, 0, 0],
[0, 2, 2],
[0, 4, 2],
[2, 1, 1],
[0, 3, 1],
[3, 2, 0]])
>>> a[..., -1]
array([3, 3, 3, 2, 0, 2, 2, 1, 1, 0])
>>> a[..., -1] > 0
array([ True, True, True, True, False, True, True, True, True, False], dtype=bool)
>>> a[a[..., -1] > 0]
array([[4, 0, 3],
[2, 1, 3],
[3, 3, 3],
[4, 2, 2],
[0, 2, 2],
[0, 4, 2],
[2, 1, 1],
[0, 3, 1]])
>>>

回答原始问题:

首先,a[-1] 返回最后一行(不是最后一列):

>>> a[-1]
array([ 90., 70., 460., 1., 10.])

然后 np.where 返回该行非零元素的索引,在本例中是每个元素:

>>> np.where(a[-1])
(array([0, 1, 2, 3, 4]),)

索引为 a[indices] 返回与 indices 中的值对应的行,在本例中为前五行。

要返回整个数组,您目前必须跳过一些步骤,因为默认情况下是“笛卡尔”索引:

a[np.arange(a.shape[0])[..., None], np.arange(a.shape[1])]

inds = np.ix_(np.arange(a.shape[0]), np.arange(a.shape[1]))
a[inds]

NumPy 将来可能会支持“正交”索引(see this pull request 以及在 NumPy 讨论邮件列表上的长期讨论),这应该允许更灵活的索引。

关于python - np.where 二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30213671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com