我想切片NumPy nxn数组.我想提取该数组的m行和列的任意选择(即行数/列数没有任何模式),使其成为一个新的mxm数组.对于这个例子,让我们说数组是4x4,我想从中提取一个2x2数组.
这是我们的数组:
from numpy import *
x = range(16)
x = reshape(x,(4,4))
print x
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
Run Code Online (Sandbox Code Playgroud)
要删除的行和列是相同的.最简单的情况是当我想要提取一个位于开头或结尾的2x2子矩阵时,即:
In [33]: x[0:2,0:2]
Out[33]:
array([[0, 1],
[4, 5]])
In [34]: x[2:,2:]
Out[34]:
array([[10, 11],
[14, 15]])
Run Code Online (Sandbox Code Playgroud)
但是,如果我需要删除另一行/列的混合物怎么办?如果我需要删除第一行和第三行/行,从而提取子矩阵[[5,7],[13,15]]怎么办?行/行可以有任何组合.我读到某个地方,我只需要使用行和列的索引数组/列表索引我的数组,但这似乎不起作用:
In [35]: x[[1,3],[1,3]]
Out[35]: array([ 5, 15])
Run Code Online (Sandbox Code Playgroud)
我发现了一种方法,即:
In [61]: x[[1,3]][:,[1,3]]
Out[61]:
array([[ 5, 7],
[13, 15]])
Run Code Online (Sandbox Code Playgroud)
第一个问题是它几乎不可读,尽管我可以忍受它.如果有人有更好的解决方案,我当然希望听到它.
另一件事是我在一个论坛上读到,使用数组索引数组强制NumPy制作所需数组的副本,因此当处理大型数组时,这可能会成为一个问题.为什么这样/这个机制如何运作?
我有一个2D NumPy数组,并希望将其中的所有值替换为大于或等于阈值T的255.0.据我所知,最基本的方式是:
shape = arr.shape
result = np.zeros(shape)
for x in range(0, shape[0]):
for y in range(0, shape[1]):
if arr[x, y] >= T:
result[x, y] = 255
Run Code Online (Sandbox Code Playgroud)
什么是最简洁和pythonic的方式来做到这一点?
有没有更快(可能不那么简洁和/或更少pythonic)的方式来做到这一点?
这将是用于人体头部的MRI扫描的窗口/水平调整子程序的一部分.2D numpy数组是图像像素数据.
是否有一个scipy函数或numpy函数或模块用于python,在给定特定窗口的情况下计算一维数组的运行平均值?
我正在尝试将python和一系列软件包安装到64位Windows 7桌面上.我安装了Python 3.4,安装了Microsoft Visual Studio C++,并成功安装了numpy,pandas和其他一些.我在尝试安装scipy时遇到以下错误;
numpy.distutils.system_info.NotFoundError: no lapack/blas resources found
Run Code Online (Sandbox Code Playgroud)
我正在使用pip install离线,我正在使用的安装命令是;
pip install --no-index --find-links="S:\python\scipy 0.15.0" scipy
Run Code Online (Sandbox Code Playgroud)
我已经阅读了这里有关要求编译器的帖子,如果我理解正确的是VS C++编译器.我正在使用2010版本,因为我正在使用Python 3.4.这适用于其他包.
我是否必须使用窗口二进制文件,或者有一种方法可以让pip install工作吗?
非常感谢您的帮助
我有一个布尔类型的NumPy数组'boolarr'.我想计算其值为的元素数量True.是否有专门用于此任务的NumPy或Python例程?或者,我是否需要迭代脚本中的元素?
我很难理解究竟是如何einsum运作的.我看过文档和一些例子,但它似乎并不坚持.
这是我们在课堂上看到的一个例子:
C = np.einsum("ij,jk->ki", A, B)
Run Code Online (Sandbox Code Playgroud)
对于两个数组A和B
我想这会采取A^T * B,但我不确定(它正在将其中一个的转置正确吗?).任何人都可以告诉我这里发生了什么(通常在使用时einsum)?
我正在Python项目上运行PyLint.PyLint对无法找到numpy成员提出了许多抱怨.如何在避免跳过成员资格检查的同时避免这种情况.
从代码:
import numpy as np
print np.zeros([1, 4])
Run Code Online (Sandbox Code Playgroud)
哪,跑了,我得到了预期的:
[[0. 0. 0. 0.]]
但是,pylint给了我这个错误:
E:3,6:模块'numpy'没有'零'成员(无成员)
对于版本,我使用pylint 1.0.0(astroid 1.0.1,常见的0.60.0)并尝试使用numpy 1.8.0.
请考虑以下代码:
avgDists = np.array([1, 8, 6, 9, 4])
ids = avgDists.argsort()[:n]
Run Code Online (Sandbox Code Playgroud)
这给了我n最小元素的索引.是否可以argsort按降序使用它来获得n最高元素的索引?
当我尝试
numpy.newaxis
Run Code Online (Sandbox Code Playgroud)
结果给出了一个2维的绘图框架,x轴从0到1.但是,当我尝试使用numpy.newaxis切片矢量时,
vector[0:4,]
[ 0.04965172 0.04979645 0.04994022 0.05008303]
vector[:, np.newaxis][0:4,]
[[ 0.04965172]
[ 0.04979645]
[ 0.04994022]
[ 0.05008303]]
Run Code Online (Sandbox Code Playgroud)
除了它将行向量更改为列向量之外,它是否相同?
一般来说,numpy.newaxis我们应该使用什么,在什么情况下使用它?
python numpy multidimensional-array numpy-broadcasting numpy-ndarray
numpy ×10
python ×10
arrays ×3
boolean ×1
count ×1
list ×1
matplotlib ×1
numpy-einsum ×1
pip ×1
pylint ×1
python-2.7 ×1
python-3.x ×1
replace ×1
scipy ×1
slice ×1
windows ×1