默认情况下,即使阵列基础被腌制,对numpy视图数组进行pickle也会丢失视图关系.我的情况是我有一些复杂的容器对象被腌制.在某些情况下,某些包含的数据是其他一些数据.保存每个视图的独立数组不仅会丢失空间,而且重新加载的数据也会丢失视图关系.
一个简单的例子是(但在我的例子中,容器比字典更复杂):
import numpy as np
import cPickle
tmp = np.zeros(2)
d1 = dict(a=tmp,b=tmp[:]) # d1 to be saved: b is a view on a
pickled = cPickle.dumps(d1)
d2 = cPickle.loads(pickled) # d2 reloaded copy of d1 container
print 'd1 before:', d1
d1['b'][:] = 1
print 'd1 after: ', d1
print 'd2 before:', d2
d2['b'][:] = 1
print 'd2 after: ', d2
Run Code Online (Sandbox Code Playgroud)
哪个会打印:
d1 before: {'a': array([ 0., 0.]), 'b': array([ 0., 0.])}
d1 after: {'a': array([ 1., 1.]), 'b': …Run Code Online (Sandbox Code Playgroud) 我现在了解软件的源代码版本和二进制版本之间的主要区别。一个很好的问题在这里。
我需要在 Linux 机器上安装 Node.js,并选择了二进制版本,因为它不需要编译/安装。我下载了 tar,解压缩文件,它已经准备好了。
我的问题是,当两种选择都可用时,人们会出于什么原因选择源代码而不是二进制文件?
我唯一能想到的是这个人希望阅读/研究源代码。
我正在关注Elasticsearch 教程,但在尝试在脚本中使用参数时遇到了问题.
第1步:创建一个新文档 - 确定(index = website; type = blog; id = 1)
curl -XPUT localhost:9200/website/blog/1?pretty -d '{
"title":"my first post",
"tags" : [ "tag1" ]
}'
Run Code Online (Sandbox Code Playgroud)
第2步:使用脚本向tags数组附加一个额外的值- 错误
curl -XPOST localhost:9200/website/blog/1/_update?pretty -d '{
"script" : "ctx._source.tags+=new_tag",
"params" : {
"new_tag" : "tag2"
}
}'
Run Code Online (Sandbox Code Playgroud)
错误信息是这样,提到"reason" : "Variable [new_tag] is not defined."但是我已经按照new_tag教程页面上的描述定义了变量.我究竟做错了什么?
"error" : {
"root_cause" : [
{
"type" : "remote_transport_exception",
"reason" : "[mrukUvA][127.0.0.1:9300][indices:data/write/update[s]]"
}
],
"type" : "illegal_argument_exception", …Run Code Online (Sandbox Code Playgroud) 我有以下代码将hdf5文件作为numpy数组读取:
hf = h5py.File('path/to/file', 'r')
n1 = hf.get('dataset_name')
n2 = np.array(n1)
Run Code Online (Sandbox Code Playgroud)
当我打印n2我得到这个:
Out[15]:
array([[<HDF5 object reference>, <HDF5 object reference>,
<HDF5 object reference>, <HDF5 object reference>...
Run Code Online (Sandbox Code Playgroud)
如何阅读HDF5 object reference查看存储在其中的数据?
从Python调用MATLAB必然会通过在Python中重写(很多)代码来减少性能.然而,这对我来说不是一个现实的选择,但令我很恼火的是,效率的巨大损失在于从numpy数组到MATLAB double的简单转换.
我在谈论从data1到data1m的以下转换,其中
data1 = np.random.uniform(low = 0.0, high = 30000.0, size = (1000000,))
data1m = matlab.double(list(data1))
Run Code Online (Sandbox Code Playgroud)
这里matlab.double来自Mathworks自己的MATLAB包/引擎.第二行代码在我的系统上花费了20秒,对于一个除了使数字"可食用"MATLAB之外没有真正做任何事情的转换似乎太多了.
所以基本上我正在寻找与此处给出的相反的技巧,该技巧适用于将MATLAB输出转换回Python.
我更喜欢使用defaultsContinuum提供的常用频道中的MKL工具链.但是,和许多人一样,我发现自己从conda-forge频道安装了不少套餐.
例如,考虑python-graphviz包.安装命令是
conda install -c conda-forge python-graphviz
Run Code Online (Sandbox Code Playgroud)
这导致一些不希望的依赖变化
The following packages will be UPDATED:
cvxopt: 1.1.7-py27_0 --> 1.1.9-py27_blas_openblas_201 conda-forge [blas_openblas]
gsl: 2.2.1-h8267d9d_2 --> 2.2.1-blas_openblas_2 conda-forge [blas_openblas]
numpy: 1.13.3-py27hbcc08e0_0 --> 1.13.3-py27_blas_openblas_200 conda-forge [blas_openblas]
scikit-learn: 0.19.1-py27h445a80a_0 --> 0.19.1-py27_blas_openblas_200 conda-forge [blas_openblas]
scipy: 0.19.1-py27h1edc525_3 --> 0.19.1-py27_blas_openblas_202 conda-forge [blas_openblas]
Run Code Online (Sandbox Code Playgroud)
我不想更改为OpenBlas numpy,因此我手动处理所有依赖项然后
conda install -c conda-forge --no-deps python-graphviz
Run Code Online (Sandbox Code Playgroud)
这工作正常,但很费力,并会招致错误.
我原以为如果我添加conda-forge了低优先级通道
conda config --append channels conda-forge
Run Code Online (Sandbox Code Playgroud)
然后它会停止尝试覆盖numpy安装,但事实证明这是不真实的.conda config --show正如预期的那样,现在的输出包含
channel_alias: https://conda.anaconda.org
channel_priority: True
channels: …Run Code Online (Sandbox Code Playgroud) 我得到两个 3d 矩阵 A(32x3x3)和 B(32x3x3),我想得到维度为 32x3x3 的矩阵 C。计算可以使用循环完成,如:
a = numpy.random.rand(32, 3, 3)
b = numpy.random.rand(32, 3, 3)
c = numpy.random.rand(32, 3, 3)
for i in range(32):
c[i] = numpy.dot(a[i], b[i])
Run Code Online (Sandbox Code Playgroud)
我相信必须有一个更有效的单线解决方案来解决这个问题。有没有人可以帮忙,谢谢。
python numpy matrix multidimensional-array matrix-multiplication
说我要打印0通过9.
我输入for i in range(10): print(i),按下enter和终端显示...,等待进一步的陈述.
所以我必须enter再次按下以打印数字.
>>> for i in range(10): print(i)
...
Run Code Online (Sandbox Code Playgroud)
如何打印号码而不必按enter两次?
我试图合并具有相同数量的参数的两个数组.
输入:
first = [[650001.88, 300442.2, 18.73, 0.575, 650002.094, 300441.668, 18.775],
[650001.96, 300443.4, 18.7, 0.65, 650002.571, 300443.182, 18.745],
[650002.95, 300442.54, 18.82, 0.473, 650003.056, 300442.085, 18.745]]
second = [[1],
[2],
[3]]
Run Code Online (Sandbox Code Playgroud)
我的预期产量:
final = [[650001.88, 300442.2, 18.73, 0.575, 650002.094, 300441.668, 18.775, 1],
[650001.96, 300443.4, 18.7, 0.65, 650002.571, 300443.182, 18.745, 2],
[650002.95, 300442.54, 18.82, 0.473, 650003.056, 300442.085, 18.745, 3]]
Run Code Online (Sandbox Code Playgroud)
要做到这一点,我创建简单的循环:
for i in first:
for j in second:
final += np.append(j, i)
Run Code Online (Sandbox Code Playgroud)
我得到了我填补我遗失的东西.首先,我的循环非常慢.其次我的数据非常多,我有超过2毫升的行循环.所以我尝试使用此代码找到更快的方法:
final = [np.append(i, second[0]) for i in first]
Run Code Online (Sandbox Code Playgroud)
它的工作速度比前一个循环快得多,但它仅附加第二个数组的第一个值.你能帮助我吗?
我了解生命周期包含阶段,并且阶段可能具有与其绑定的插件目标。
但生命周期clean还是阶段?
构建生命周期的介绍似乎表明clean它既是一个生命周期又是一个阶段:
共有三个内置的构建生命周期:default、clean和 site。
...
clean和 package 参数是构建阶段,而 dependency:copy - dependencies 是(插件的)目标。
mvn clean dependency:copy-dependencies package