【问题标题】:Randomize 2 numpy arrays the same way [duplicate]以相同的方式随机化2个numpy数组[重复]
【发布时间】:2021-04-26 10:08:51
【问题描述】:

我有 2 个 np.ndarray() 对象,我想像这样随机化(或随机播放)它们:

>>> a
[[12. 13. 24. ... 23. 45. 67.] [32. 10. 23. ... 23. 45. 67.] [12. 13. 24. ... 23. 45. 67.] ... [12. 13. 24. ... 23. 45. 67.]]
>>> b
[0. 0. 0. ... 1.]
>>> shuffle(a, b)
>>> a
[[12. 13. 24. ... 23. 45. 67.] [32. 10. 23. ... 23. 45. 67.] [12. 13. 24. ... 23. 45. 67.] ... [12. 13. 24. ... 23. 45. 67.]]
>>> b
[1. 0. 0. ... 0.]

变量 b 中的每个数字都对应于变量 a 中我的 AI 训练数据的标签。

【问题讨论】:

  • 根据您的输出,a 根本没有被洗牌。那么为什么不只是from numpy import random 然后random.shuffle(b) 呢?
  • 实际代码需要像我描述的那样对它们进行洗牌。我没有在示例中对其进行洗牌,因为我懒得洗牌;)
  • 不是真的,他只是有,似乎是,几乎相同的行。
  • 检查我的解决方案,有多种方法可以做到这一点。

标签: python numpy random numpy-ndarray python-3.8


【解决方案1】:

使用 Numpy

​​>

您可以使用np.c_ 将它们混在一起,然后将它们放回单独的数组中-

import numpy as np

#Creating same X and y for demonstration
X = np.arange(0,10).reshape(5,2)
y = np.arange(0,10).reshape(5,2)

c = np.c_[X,y]
np.random.shuffle(c)

X1, y1 = c[:,:X.shape[1]], c[:,:y.shape[1]]

print(X1)
print(y1)
# Note, same order remains

[[8 9]
 [0 1]
 [4 5]
 [6 7]
 [2 3]]

[[8 9]
 [0 1]
 [4 5]
 [6 7]
 [2 3]]

使用 Sklearn

更好的选择是使用 sklearn api -

from sklearn.utils import shuffle
X, y = shuffle(X, y, random_state=0)

【讨论】:

  • 谢谢! sklearn 对我来说效果更好!
  • 很高兴为您提供帮助。实际上,您也可以在 shuffle 中放入更多数组以正常工作。例如 X_train、y_train、X_test、y_test。
  • 哇哦,我不知道!
  • 是的,random_state 将让您每次使用相同的整数值重现相同的洗牌。
猜你喜欢
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2011-05-12
  • 2014-06-10
  • 2022-01-04
  • 2013-01-18
  • 2022-01-15
  • 1970-01-01
相关资源
最近更新 更多