相关疑难解决方法(0)

如何在numpy中反转置换数组

给定自我索引(不确定这是否是正确的术语)numpy数组,例如:

a = np.array([3, 2, 0, 1])
Run Code Online (Sandbox Code Playgroud)

这表示这种排列(=>是一个箭头):

0 => 3
1 => 2
2 => 0
3 => 1
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个表示逆变换的数组,而不是在python中"手动"执行它,也就是说,我想要一个纯粹的 numpy解决方案.我想在上面的例子中得到的结果是:

array([2, 3, 1, 0])
Run Code Online (Sandbox Code Playgroud)

这相当于

0 <= 3                0 => 2
1 <= 2       or       1 => 3
2 <= 0                2 => 1
3 <= 1                3 => 0
Run Code Online (Sandbox Code Playgroud)

看起来很简单,但我想不出怎么做.我试过谷歌搜索,但没有找到任何相关的.

python algorithm numpy vectorization

25
推荐指数
3
解决办法
7146
查看次数

在numpy中转换一组数字,以便将每个数字转换为一些小于它的其他数字

考虑一组数字:

In [8]: import numpy as np

In [9]: x = np.array([np.random.random() for i in range(10)])

In [10]: x
Out[10]: 
array([ 0.62594394,  0.03255799,  0.7768568 ,  0.03050498,  0.01951657,
        0.04767246,  0.68038553,  0.60036203,  0.3617409 ,  0.80294355])
Run Code Online (Sandbox Code Playgroud)

现在,我想这组变换成另一组y以下列方式:每个元素ix,相应的元素jy将其他元素的数量在x这不到i.例如,上面给出的内容x如下:

In [25]: y
Out[25]: array([ 6.,  2.,  8.,  1.,  0.,  3.,  7.,  5.,  4.,  9.])
Run Code Online (Sandbox Code Playgroud)

现在,我可以使用简单的python循环来做到这一点:

In [16]: for i in range(len(x)):
    ...:     tot = 0
    ...:     for j in …
Run Code Online (Sandbox Code Playgroud)

python numpy python-3.x

8
推荐指数
2
解决办法
210
查看次数

获取列表升序的索引

我知道这个问题已经问了一百次了,但答案似乎总是“使用 numpy 的 argsort”。但是,要么我误解了大多数人的要求,要么问题的答案不正确。无论如何,我希望获得列表升序的索引。措辞令人困惑,因此举个例子,给定一个列表,[4, 2, 1, 3]我希望得到一个列表[3, 1, 0, 2]。最小的项目是1,所以它得到索引0,最大的项目是,4所以它得到索引3。在我看来,argsort经常有人建议这样做,但似乎并没有这样做。

from numpy import argsort

l = [4, 2, 1, 3]
print(argsort(l))
# [2, 1, 3, 0]
# Expected [3, 1, 0, 2]
Run Code Online (Sandbox Code Playgroud)

很明显 argsort 正在做其他事情,那么它实际上在做什么,它与预期的行为有何相似之处,以至于它经常(错误地)被建议?而且,更重要的是,我怎样才能获得所需的输出?

python sorting numpy list python-3.x

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

标签 统计

numpy ×3

python ×3

python-3.x ×2

algorithm ×1

list ×1

sorting ×1

vectorization ×1