- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
你好!
我有两个代码块,一个可以工作,一个不能。唯一的区别是我不使用的 numpy 模块的注释代码行。为什么我从不引用“npm”却需要导入该模型?
此命令有效:
import numpy as np
import numpy.matlib as npm
V = np.array([[1,2,3],[4,5,6],[7,8,9]])
P1 = np.matlib.identity(V.shape[1], dtype=int)
P1
这个命令不起作用:
import numpy as np
#import numpy.matlib as npm
V = np.array([[1,2,3],[4,5,6],[7,8,9]])
P1 = np.matlib.identity(V.shape[1], dtype=int)
P1
上面得到这个错误:
AttributeError: 'module' object has no attribute 'matlib'
提前致谢!
最佳答案
这是因为numpy.matlib
是numpy
的可选子包,必须单独导入。
此功能的原因可能是:
numpy
,numpy.matlib
子模块重新定义了 numpy
的函数以返回矩阵而不是 ndarrays,一个可选的许多人可能不想要的功能当您只导入 numpy
而没有子包 matlib
时,Python 将寻找 .matlib
作为 numpy
包。在未导入 numpy.matlib
的情况下,此属性尚未分配给 numpy
(请参阅下面的讨论)
如果您想知道为什么 np.matlib.identity
无需使用关键字 npm
即可工作,那是因为当您导入子模块 matlib
,父模块 numpy
(在您的例子中名为 np
)将被赋予一个属性 matlib
,该属性绑定(bind)到子模块模块。这仅在您首先定义 numpy
时有效。
来自reference :
When a submodule is loaded using any mechanism (e.g. importlib APIs, the import or import-from statements, or built-in import()) a binding is placed in the parent module’s namespace to the submodule object.
导入内容的选择在模块目录中模块各自的 __init__.py
文件中确定。您可以使用 dir()
函数查看各个模块定义的名称。
>> import numpy
>> 'matlib' in dir(numpy)
# False
>> import numpy.matlib
>> 'matlib' in dir(numpy)
# True
或者,如果您直接查看 __init__.py
file for numpy
您会看到 matlib
没有导入。
如果您想知道命名空间是如何顺利复制的;
matlib
source code运行此命令以复制 numpy
命名空间:
import numpy as np # (1)
...
# need * as we're copying the numpy namespace
from numpy import * # (2)
...
__all__ = np.__all__[:] # copy numpy namespace # (3)
第(2)行,from numpy import *
尤为重要。因此,您会注意到,如果您只导入 numpy.matlib
,您仍然可以使用所有 numpy
模块,而无需导入 numpy
!
如果没有第 (2) 行,第 (3) 行中的 namespace 副本将仅附加到子模块。有趣的是,由于第 (3) 行,您仍然可以执行这样一个有趣的命令。
import numpy.matlib
numpy.matlib.np.matlib.np.array([1,1])
这是因为 np.__all__
附加到 numpy.matlib
的 np
(通过第 (1) 行导入) .
关于python - 如果我只是从 numpy 模块引用它,为什么我必须从 numpy 导入它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41818379/
当我这样做时... import numpy as np ...我可以使用它但是... import pprint as pp ...不能,因为我需要这样做... from pprint import
我第一次尝试将 OpenCV 用于 Python 3。要安装,我只需在终端中输入“pip3 install opencv-python”。当我这样做时,我在 Finder(我在 Mac 上)中看到,在
如果有一个库我将使用至少两种方法,那么以下之间在性能或内存使用方面是否有任何差异? from X import method1, method2 和 import X 最佳答案 有区别,因为在 imp
我正在从 lodash 导入一些函数,我的同事告诉我,单独导入每个函数比将它们作为一个组导入更好。 当前方法: import {fn1, fn2, fn3} from 'lodash'; 首选方法:
之间有什么关系: import WSDL 中的元素 -和- import元素和在 XML Schema ...尤其是 location 之间的关系前者和 schemaLocation 的属性后者的属性
我在从 'theano.configdefaults' 导入 'local_bitwidth' 时遇到问题。并显示以下消息: ImportError
我注意到 React 可以这样导入: import * as React from 'react'; ...或者像这样: import React from 'react'; 第一个导入 react
对于当前的项目,我必须使用矩阵中提供的信息并对其进行数学计算,以及使用 ITK/VTK 函数来显示医疗信息/渲染。基本上我必须以(我猜)50/50 的方式同时使用 matlab 例程和 VTK/ITK
当我看到 pysqlite 的示例时,SQLite 库有两个用例。 from sqlite3 import dbapi2 as sqlite3 和 import sqlite3 为什么有两种方式支持s
我使用 Anaconda Python 发行版:Python 2.7 x64 和 Windows 7 SP1 x64 Ultimate。 当我import matplotlib.pyplot时,我得到
目录 【容器】镜像导出/导入 导出 导入 带标签 不带标签,后期修改 【仓库】镜像导出/导入
我正在寻找一种导入模块的方法,以便我可以从子文件夹 project/v0 和根文件夹 project 运行脚本。/p> 我在 python 3.6 中的文件结构(这就是没有初始化文件的原因) proj
我通常被告知以下是不好的做法。 from module import * 主要原因(或者有人告诉我)是,您可能会导入一些您不想要的东西,并且它可能会隐藏另一个模块中具有类似名称的函数或类。 但是,Py
我为 urllib (python3) 编写了一个小包装器。在if中导入模块是否正确且安全? if self.response_encoding == 'gzip': import gzip
我正在 pimcore 中创建一个新站点。有没有办法导出/导入 pimcore 站点的完整数据,以便我可以导出 xml/csv 格式的 pimcore 数据进行必要的更改,然后将其导入回来? 最佳答案
在 Node JS 中测试以下模块布局,看起来本地导出的定义总是在名称冲突的情况下替换外部导出的定义(参见 B.js 中的 f1)。 A.js export const f1 = 'A' B.js e
我在使用 VBA 代码时遇到了一些问题,该代码应该将 excel 数据导入我的 Access 数据库。当我运行代码时,我收到一个运行时错误“运行时错误 438 对象不支持此属性或方法”。来自我在其他论
我有一个名为 elements 的包,其中包含按钮、trifader、海报等内容。在 Button 类中,我正在执行 from elements import * 这执行正常,当我尝试 print(p
在我长期使用 python 的经验中,我遇到了一个非常奇怪的问题。 提前我想说我想知道为什么会发生这种情况 ,而不是如何更改我的代码或如何修复它,因为我也可以做到。 我正在使用 python2.7.3
我正在更新我的包。但是,我正在为依赖项/导入而苦苦挣扎。我使用了两个冲突的包 - ggplot2和 psych及其功能 alpha当然还有 alpha ggplot2 的对象不同于 alpha psy
我是一名优秀的程序员,十分优秀!