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].
训练多层感知器时,纪元和迭代之间有什么区别?
artificial-intelligence terminology machine-learning neural-network deep-learning
我正在尝试使用以下命令安装PIL(Python Imaging Library):
sudo pip install pil
Run Code Online (Sandbox Code Playgroud)
但我收到以下消息:
Downloading/unpacking PIL
You are installing a potentially insecure and unverifiable file. Future versions of pip will default to disallowing insecure files.
Downloading PIL-1.1.7.tar.gz (506kB): 506kB downloaded
Running setup.py egg_info for package PIL
WARNING: '' not a valid package name; please use only.-separated package names in setup.py
Installing collected packages: PIL
Running setup.py install for PIL
WARNING: '' not a valid package name; please use only.-separated package names in setup.py
--- using frameworks …Run Code Online (Sandbox Code Playgroud) 我想在jupyter笔记本中包含图像.
如果我做了以下,它的工作原理:
from IPython.display import Image
Image("img/picture.png")
Run Code Online (Sandbox Code Playgroud)
但我想将图像包含在markdown单元格中,以下代码给出了404错误:

Run Code Online (Sandbox Code Playgroud)
我也试过了

Run Code Online (Sandbox Code Playgroud)
但我仍然得到同样的错误:
404 GET /notebooks/%22/home/user/folder/img/picture.png%22 (127.0.0.1) 2.74ms referer=http://localhost:8888/notebooks/notebook.ipynb
Run Code Online (Sandbox Code Playgroud) 如何查看我正在使用的NumPy版本?
我正在使用Mac OS X v10.6.1(Snow Leopard).
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)
两个函数都返回相同的列表.那么两个不同功能执行相同工作的需求是什么.
我在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()方法,但似乎无法让它表现出来.
python ×9
numpy ×7
arrays ×2
image ×2
flatten ×1
installation ×1
jupyter ×1
list ×1
max ×1
pip ×1
python-2.7 ×1
random ×1
shuffle ×1
terminology ×1
version ×1