- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 scipy 的 loadmat
函数将 matlab 数据文件加载到 python 中。
from scipy.io import loadmat
data = loadmat('data.mat')
fields = data['field']
字段
的类型是numpy.ndarray
:
print 'fields type={}'.format(type(fields))
print 'fields dtype={}'.format(fields.dtype)
print 'fields shape={}'.format(fields.shape)
fields type=<type 'numpy.ndarray'>
fields dtype=object
fields shape=(5,)
我使用 nditer
遍历数组:
for x in np.nditer(fields, flags=['refs_ok']):
print 'x={}'.format(x)
print 'x type={}'.format(type(x))
print 'x dtype={}'.format(x.dtype)
print 'x shape={}'.format(x.shape)
break
x=[u'ACE']
x type=<type 'numpy.ndarray'>
x dtype=object
x shape=()
索引错误:
如果我尝试访问 x
的第一个元素,我会得到一个 IndexError
:
x[0]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-102-8c374ae22096> in <module>()
17 print 'type={}'.format(type(x))
18 print 'dtype={}'.format(x.dtype)
---> 19 x[0]
20 break
21
IndexError: too many indices for array
问题:
type(x)
返回 nump.ndarray
怎么会说“数组的索引太多”?x
的内容提取到字符串中?以下是我使用的版本:
print 'python version: {}'.format(sys.version)
print 'numpy version: {}'.format(numpy.__version__)
print 'scipy version: {}'.format(scipy.__version__)
python version: 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2]
numpy version: 1.11.0
scipy version: 0.17.1
最佳答案
无需详细查看您的错误,我可以指出一些陷阱。
.mat 将包含 MATLAB 矩阵(始终为 2d 或更高)、单元格和结构。
loadmat
以各种方式呈现它们。有些词典必须按名称索引。有对象数组(dtype=object)。并且有 nd 数字或字符串数组。您可能需要通过多个级别才能获得数字数组。
检查数组的“形状”(大小)及其“dtype”。如果 shape 是 ()
和 dtype
对象,则用 y=x[()]
提取它。
这是一个这样的 0d 对象数组的例子:
In [4]: y=np.arange(3)
In [5]: x=np.empty((), dtype=object)
In [6]: x[()]=y
In [7]: x
Out[7]: array(array([0, 1, 2]), dtype=object)
In [8]: x.shape
Out[8]: ()
In [9]: x.dtype
Out[9]: dtype('O')
In [10]: x[0]
...
IndexError: too many indices for array
In [11]: x[()]
Out[11]: array([0, 1, 2])
x
是一个 0d 数组 (x.ndim),因此它必须使用 0 元素元组 ()
进行索引。对于 MATLAB 程序员来说,这可能看起来很奇怪。
在 numpy
(通常是 Python)中,x[a,b,c]
与 x[(a,b,c)] 相同
和 ind=(a,b,c); x[ind]
。换句话说,[]
中的参数被理解为一个值元组。 (1,2)
是一个 2 元素元组,(1,)
是一个元素((1)
只是一个分组),并且()
是一个 0 元素的元组。所以 x[()]
只是常规 nd
索引符号的扩展。这不是特例。
关于python - 如何访问 numpy ndarray 的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37996883/
作为脚本的输出,我有 numpy masked array和标准numpy array .如何在运行脚本时轻松检查数组是否为掩码(具有 data 、 mask 属性)? 最佳答案 您可以通过 isin
我的问题 假设我有 a = np.array([ np.array([1,2]), np.array([3,4]), np.array([5,6]), np.array([7,8]), np.arra
numpy 是否有用于矩阵模幂运算的内置实现? (正如 user2357112 所指出的,我实际上是在寻找元素明智的模块化减少) 对常规数字进行模幂运算的一种方法是使用平方求幂 (https://en
我已经在 Numpy 中实现了这个梯度下降: def gradientDescent(X, y, theta, alpha, iterations): m = len(y) for i
我有一个使用 Numpy 在 CentOS7 上运行的项目。 问题是安装此依赖项需要花费大量时间。 因此,我尝试 yum install pip install 之前的 numpy 库它。 所以我跑:
处理我想要旋转的数据。请注意,我仅限于 numpy,无法使用 pandas。原始数据如下所示: data = [ [ 1, a, [, ] ], [ 1, b, [, ] ], [ 2,
numpy.random.seed(7) 在不同的机器学习和数据分析教程中,我看到这个种子集有不同的数字。选择特定的种子编号真的有区别吗?或者任何数字都可以吗?选择种子数的目标是相同实验的可重复性。
我需要读取存储在内存映射文件中的巨大 numpy 数组的部分内容,处理数据并对数组的另一部分重复。整个 numpy 数组占用大约 50 GB,我的机器有 8 GB RAM。 我最初使用 numpy.m
处理我想要旋转的数据。请注意,我仅限于 numpy,无法使用 pandas。原始数据如下所示: data = [ [ 1, a, [, ] ], [ 1, b, [, ] ], [ 2,
似乎 numpy.empty() 可以做的任何事情都可以使用 numpy.ndarray() 轻松完成,例如: >>> np.empty(shape=(2, 2), dtype=np.dtype('d
我在大型 numpy 数组中有许多不同的形式,我想使用 numpy 和 scipy 计算它们之间的边到边欧氏距离。 注意:我进行了搜索,这与堆栈中之前的其他问题不同,因为我想获得数组中标记 block
我有一个大小为 (2x3) 的 numpy 对象数组。我们称之为M1。在M1中有6个numpy数组。M1 给定行中的数组形状相同,但与 M1 任何其他行中的数组形状不同。 也就是说, M1 = [ [
如何使用爱因斯坦表示法编写以下点积? import numpy as np LHS = np.ones((5,20,2)) RHS = np.ones((20,2)) np.sum([ np.
假设我有 np.array of a = [0, 1, 1, 0, 0, 1] 和 b = [1, 1, 0, 0, 0, 1] 我想要一个新矩阵 c 使得如果 a[i] = 0 和 b[i] = 0
我有一个形状为 (32,5) 的 numpy 数组 batch。批处理的每个元素都包含一个 numpy 数组 batch_elem = [s,_,_,_,_] 其中 s = [img,val1,val
尝试为基于文本的多标签分类问题训练单层神经网络。 model= Sequential() model.add(Dense(20, input_dim=400, kernel_initializer='
首先是一个简单的例子 import numpy as np a = np.ones((2,2)) b = 2*np.ones((2,2)) c = 3*np.ones((2,2)) d = 4*np.
我正在尝试平均二维 numpy 数组。所以,我使用了 numpy.mean 但结果是空数组。 import numpy as np ws1 = np.array(ws1) ws1_I8 = np.ar
import numpy as np x = np.array([[1,2 ,3], [9,8,7]]) y = np.array([[2,1 ,0], [1,0,2]]) x[y] 预期输出: ar
我有两个数组 A (4000,4000),其中只有对角线填充了数据,而 B (4000,5) 填充了数据。有没有比 numpy.dot(a,b) 函数更快的方法来乘(点)这些数组? 到目前为止,我发现
我是一名优秀的程序员,十分优秀!