np.random.seed在Scikit-Learn教程的下面代码中做了什么?我对NumPy的随机状态生成器的东西不太熟悉,所以我真的很感谢外行人的术语解释.
np.random.seed(0)
indices = np.random.permutation(len(iris_X))
Run Code Online (Sandbox Code Playgroud) 我有两个不同形状的numpy数组,但长度相同(领先维度).我想改变它们中的每一个,使得相应的元素继续对应 - 即相对于它们的前导索引一致地混洗它们.
此代码有效,并说明了我的目标:
def shuffle_in_unison(a, b):
assert len(a) == len(b)
shuffled_a = numpy.empty(a.shape, dtype=a.dtype)
shuffled_b = numpy.empty(b.shape, dtype=b.dtype)
permutation = numpy.random.permutation(len(a))
for old_index, new_index in enumerate(permutation):
shuffled_a[new_index] = a[old_index]
shuffled_b[new_index] = b[old_index]
return shuffled_a, shuffled_b
Run Code Online (Sandbox Code Playgroud)
例如:
>>> a = numpy.asarray([[1, 1], [2, 2], [3, 3]])
>>> b = numpy.asarray([1, 2, 3])
>>> shuffle_in_unison(a, b)
(array([[2, 2],
[1, 1],
[3, 3]]), array([2, 1, 3]))
Run Code Online (Sandbox Code Playgroud)
然而,这种感觉笨重,效率低,而且速度慢,而且需要使阵列的复制 - 我宁愿他们洗牌在原地的,因为他们将是相当大的.
有没有更好的方法来解决这个问题?更快的执行速度和更低的内存使用率是我的主要目标,但优雅的代码也会很好.
我有另外一个想法是:
def shuffle_in_unison_scary(a, b):
rng_state = numpy.random.get_state()
numpy.random.shuffle(a)
numpy.random.set_state(rng_state)
numpy.random.shuffle(b)
Run Code Online (Sandbox Code Playgroud)
这工作...但它是一个有点吓人,因为我看不出有什么保证它会继续工作 - …
我正在上一些大学课程并获得了一个"教学账户",这是一个我可以用来做工作的学校账户.我想在那台机器上运行我的计算密集型Numpy,matplotlib,scipy代码,但我无法安装这些模块,因为我不是系统管理员.
我该怎么做安装?
好吧,我正在四处寻找将PIL图像对象来回转换为numpy数组,这样我就可以比PIL的PixelAccess对象允许更快的像素转换.我已经想出如何通过以下方式将像素信息放在一个有用的3D numpy数组中:
pic = Image.open("foo.jpg")
pix = numpy.array(pic.getdata()).reshape(pic.size[0], pic.size[1], 3)
Run Code Online (Sandbox Code Playgroud)
但在完成所有令人敬畏的变换后,我似乎无法弄清楚如何将其加载回PIL对象.我知道这个putdata()方法,但似乎无法让它表现出来.
在numpy/中scipy,是否有一种有效的方法来获取数组中唯一值的频率计数?
这些方面的东西:
x = array( [1,1,1,2,2,2,5,25,1,1] )
y = freq_count( x )
print y
>> [[1, 5], [2,3], [5,1], [25,1]]
Run Code Online (Sandbox Code Playgroud)
(对你来说,R用户在那里,我基本上都在寻找这个table()功能)
ndarray和arrayNumpy有什么区别?我在哪里可以找到numpy源代码中的实现?
我需要创建一个长度为NumPy的数组n,其中每个元素都是v.
还有什么比:
a = empty(n)
for i in range(n):
a[i] = v
Run Code Online (Sandbox Code Playgroud)
我知道zeros和ones会的工作为V = 0,1,我可以使用v * ones(n),但是当它不会工作v的None,而且也将是慢得多.
比较两个numpy数组是否相等的最简单的方法是什么(其中相等定义为:对于所有索引i,A = B iff A[i] == B[i])?
简单地使用==给我一个布尔数组:
>>> numpy.array([1,1,1]) == numpy.array([1,1,1])
array([ True, True, True], dtype=bool)
Run Code Online (Sandbox Code Playgroud)
我是否必须and使用此数组的元素来确定数组是否相等,还是有更简单的比较方法?
如果我有一个numpy dtype,我该如何自动将其转换为最接近的python数据类型?例如,
numpy.float32 -> "python float"
numpy.float64 -> "python float"
numpy.uint32 -> "python int"
numpy.int16 -> "python int"
Run Code Online (Sandbox Code Playgroud)
我可以尝试提出所有这些情况的映射,但是numpy是否提供了一些自动方式将其dtypes转换为最接近的可能的本机python类型?这种映射不一定是详尽无遗的,但它应该转换具有close python模拟的常见dtypes.我认为这已经发生在numpy的某个地方了.
创建NumPy数组并将其保存为Django上下文变量后,加载网页时收到以下错误:
array([ 0, 239, 479, 717, 952, 1192, 1432, 1667], dtype=int64) is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
这是什么意思?