在python中置换

时间:2018-11-25 22:57:56

标签: python numpy

我有两个成对的数组,这意味着两个数组中的元素1需要具有相同的索引。我要置换这些元素。目前,我尝试了np.random.permutation,但这似乎没有得到正确的答案。

例如,如果两个数组分别为[1,2,3]和[4,5,6],则可能的排列方式为[4,2,3]和[1,5,6]。

3 个答案:

答案 0 :(得分:1)

您可以stack数组,并使用choice为每一行选择一个随机列。

设置

a = np.array([1,2,3])
b = np.array([4,5,6])    
v = np.column_stack((a,b))

# array([[1, 4],
#        [2, 5],
#        [3, 6]])

np.random.seed(1)
choices = np.random.choice(v.shape[1], v.shape[0])
# array([1, 1, 0])

最后,要建立索引:

v[np.arange(v.shape[0]), choices]

array([4, 5, 3])

答案 1 :(得分:0)

const SortableList = SortableContainer(({ items }) => {
  return (
    <ul>
      {items.map((value, index) => (
        <div onClick={this.someEventHandler}>
          <SortableItem key={`item-${index}`} index={index} value={value} />
        </div>
      ))}
    </ul>
  );
});

运行上面的代码1:

a=np.array([1, 2, 3])
b=np.array([4, 5, 6])
random_arr=np.random.choice([0, 1], size=(len(a),)) # Generate a random array of 0s and 1s, let's say arr([0,0,1])
a1=random_arr*a + (1-random_arr)*b                  # arr([0,0,1])*arr([1,2,3]) + arr([1,1,0])*arr([4,5,6]) = arr([4, 5, 3])
b1=random_arr*b + (1-random_arr)*a                  # arr([0,0,1])*arr([4,5,6]) + arr([1,1,0])*arr([1,2,3]) = arr([1, 2, 6])
a=a1
b=b1

运行2:

a
Out[188]: array([4, 2, 6])
b
Out[189]: array([1, 5, 3])

答案 2 :(得分:0)

您可以使用sudo su export AIRFLOW_HOME=/etc/airflow export SLUGIFY_USES_TEXT_UNIDECODE=yes pip install apache-airflow

np.choose