NumPy优于常规Python列表有什么优势?
我有大约100个金融市场系列,我打算创建一个100x100x100 = 100万个单元的立方体阵列.我将使用每个y和z对每个x进行回归(3变量),以使用标准错误填充数组.
我听说过,对于"大型矩阵",出于性能和可伸缩性的原因,我应该使用NumPy而不是Python列表.事实是,我知道Python列表,它们似乎对我有用.
如果我搬到NumPy,会有什么好处?
如果我有1000个系列(即立方体中有10亿个浮点单元)怎么办?
NumPy提出了一种获取数组最大值索引的方法np.argmax.
我想要一个类似的东西,但返回N最大值的索引.
例如,如果我有一个数组,[1, 3, 2, 4, 5],function(array, n=3)将返回的索引[4, 3, 1]相对应的元素[5, 4, 3].
import numpy as np
y = np.array(((1,2,3),(4,5,6),(7,8,9)))
OUTPUT:
print(y.flatten())
[1 2 3 4 5 6 7 8 9]
print(y.ravel())
[1 2 3 4 5 6 7 8 9]
Run Code Online (Sandbox Code Playgroud)
两个函数都返回相同的列表.那么两个不同功能执行相同工作的需求是什么.
有人可以向我解释meshgridNumpy功能的目的是什么?我知道它会为绘图创建某种坐标网格,但我无法真正看到它的直接好处.
我正在学习Sebastian Raschka的"Python机器学习",他正在使用它来绘制决策边界.请参见此处的输入11 .
我也从官方文档中尝试过这段代码,但是,输出对我来说并没有多大意义.
x = np.arange(-5, 5, 1)
y = np.arange(-5, 5, 1)
xx, yy = np.meshgrid(x, y, sparse=True)
z = np.sin(xx**2 + yy**2) / (xx**2 + yy**2)
h = plt.contourf(x,y,z)
Run Code Online (Sandbox Code Playgroud)
如果可能的话,请向我展示很多现实世界的例子.
我在NumPy中有两个简单的一维数组.我应该能够使用numpy.concatenate连接它们.但我得到以下代码的错误:
TypeError:只能将length-1数组转换为Python标量
import numpy
a = numpy.array([1, 2, 3])
b = numpy.array([5, 6])
numpy.concatenate(a, b)
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)
这工作...但它是一个有点吓人,因为我看不出有什么保证它会继续工作 - …
好吧,我正在四处寻找将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()方法,但似乎无法让它表现出来.
ndarray和arrayNumpy有什么区别?我在哪里可以找到numpy源代码中的实现?
有没有一种方便的方法来计算序列或单维numpy数组的百分位数?
我正在寻找类似于Excel的百分位函数的东西.
我查看了NumPy的统计参考,但是找不到这个.我能找到的只是中位数(第50百分位数),但不是更具体的东西.
假设我有一个ndy阵列
a = array([1,0,3])
Run Code Online (Sandbox Code Playgroud)
我想将其编码为2d 1-hot阵列
b = array([[0,1,0,0], [1,0,0,0], [0,0,0,1]])
Run Code Online (Sandbox Code Playgroud)
有快速的方法吗?比仅仅循环a设置元素更快b.
python numpy machine-learning one-hot-encoding numpy-ndarray
numpy ×10
numpy-ndarray ×10
python ×10
arrays ×3
flatten ×1
image ×1
list ×1
max ×1
mesh ×1
percentile ×1
random ×1
shuffle ×1
statistics ×1