我一直在查看Matlab的sparse
文档,试图找出是否有任何关于何时使用稀疏表示而不是完整表示的指导.
例如,我有一个data
大约30%非零条目的矩阵.我可以查看使用的内存.
whos data
Name Size Bytes Class Attributes
data 84143929x11 4394073488 double sparse
Run Code Online (Sandbox Code Playgroud)
data = full(data);
whos data
Name Size Bytes Class Attributes
data 84143929x11 7404665752 double
Run Code Online (Sandbox Code Playgroud)
在这里,我显然在节省内存,但对于任何具有30%非零条目的矩阵,这是否都适用?50%的非零条目怎么样?是否有一个经验法则,我应该将百分比转换为完整矩阵?
那么计算呢?使用稀疏矩阵进行矩阵乘法通常更慢或更快吗?稀疏矩阵运算表示
稀疏运算的计算复杂度与nnz成比例,nnz是矩阵中非零元素的数量.计算复杂度也线性地取决于矩阵的行大小m和列大小n,但是与乘积m*n(零和非零元素的总数)无关.
在不了解更多细节的情况下,很难与完整矩阵进行比较.
Scipy的稀疏矩阵库解释了每种稀疏格式的优缺点.比如说csc_matrix
CSC格式的优点
- 高效算术运算CSC + CSC,CSC*CSC等
- 有效的列切片
- 快速矩阵矢量积(CSR,BSR可能更快)
CSC格式的缺点
- 慢行切片操作(考虑CSR)
- 稀疏结构的变化是昂贵的(考虑LIL或DOK)
是否sparse
存在关于Matlab 实现的类似信息?如果是这样我在哪里可以找到它?
我有一个简短的函数,通过将它与Natural Language Toolkit中的WordNet语料库进行比较来检查单词是否是真正的单词.我从一个验证txt文件的线程调用此函数.当我运行我的代码时,第一次调用该函数时,它会抛出带有消息的AttributeError
"'WordNetCorpusReader' object has no attribute '_LazyCorpusLoader__args'"
Run Code Online (Sandbox Code Playgroud)
当我暂停执行时,同一行代码不会引发错误,因此我假设在我第一次调用时尚未加载语料库导致错误.
我曾尝试使用nltk.wordnet.ensure_loaded()
强制加载语料库,但我仍然得到同样的错误.
这是我的功能:
from nltk.corpus import wordnet as wn
from nltk.corpus import stopwords
from nltk.corpus.reader.wordnet import WordNetError
import sys
cachedStopWords = stopwords.words("english")
def is_good_word(word):
word = word.strip()
if len(word) <= 2:
return 0
if word in cachedStopWords:
return 0
try:
wn.ensure_loaded()
if len(wn.lemmas(str(word), lang='en')) == 0:
return 0
except WordNetError as e:
print "WordNetError on concept {}".format(word)
except AttributeError as e:
print "Attribute error on concept {}: {}".format(word, e.message) …
Run Code Online (Sandbox Code Playgroud) 如何将Set转换为Array?给出了将Set转换为数组的三个答案,其中没有一个目前在Chrome浏览器中有效.
假设我有一个简单的Set
var set_var = new Set(['a', 'b', 'c']);
Run Code Online (Sandbox Code Playgroud)
我可以遍历我的变量并将元素添加到空数组中
var array_var = [];
set_var.forEach(function(element){array_var.push(element)});
Run Code Online (Sandbox Code Playgroud)
但是有没有其他方法可以提供更广泛的浏览器支持?
我在下面使用过这个JavaScript:
$('body').click(function() {
if (!$(this.target).is('#popUpForm')) {
$(".modalDialog").hide();
}
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body>
<div id="openModal" class="modalDialog">
<div class="modalClose">
<a href="#close" title="Close" class="close-circle" style="color:white; text-decoration:none; font-size:14px;"></a>
<div id="signup-header">
<h4>Request a brochure, with a free demo</h4>
<h5>Please Fill in the form below: </h5>
</div>
<form id="popUpForm" class="tryMeForm" name="" onsubmit="return formCheck(this);" method="post" action="">
<div class="InputGroup">
<input type="text" name="name" id="name" value="" placeholder="First Name*" />
</div>
<div class="InputGroup">
<input type="text" name="lastname" id="lastname" value="" placeholder="Last Name*" />
</div>
<div class="InputGroup">
<input type="text" name="Email" id="Email" value="" placeholder="Email Address*" …
Run Code Online (Sandbox Code Playgroud)我正在尝试使用列上的逻辑索引切片PyTorch张量.我想要与索引向量中的1值对应的列.切片和逻辑索引都是可能的,但它们是否可以一起使用?如果是这样,怎么样?我的尝试一直在抛出无益的错误
TypeError:使用ByteTensor类型的对象索引张量.唯一支持的类型是整数,切片,numpy标量和torch.LongTensor或torch.ByteTensor作为唯一的参数.
期望的输出
C = torch.LongTensor([[1, 3], [4, 6]])
# 1 3
# 4 6
Run Code Online (Sandbox Code Playgroud)
仅对列进行逻辑索引
import torch
A_log = torch.ByteTensor([1, 0, 1]) # the logical index
B = torch.LongTensor([[1, 2, 3], [4, 5, 6]])
C = B[:, A_log] # Throws error
Run Code Online (Sandbox Code Playgroud)
我也试过使用索引列表
import torch
A_idx = torch.LongTensor([0, 2]) # the index vector
B = torch.LongTensor([[1, 2, 3], [4, 5, 6]])
C = B[:, A_idx] # Throws error
Run Code Online (Sandbox Code Playgroud)
如果向量大小相同,则逻辑索引有效
import torch
A_log = torch.ByteTensor([1, 0, 1]) # the logical …
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种重新排序技术来将邻接矩阵的连通分量组合在一起.
例如,我用蓝色和绿色两组进行了说明.最初,'1的条目分布在矩阵的行和列中.通过重新排序行和列,所有'1'可以位于矩阵的两个连续部分中,更清楚地显示蓝色和绿色分量.
我不记得这种重新排序技术是什么.我搜索了邻接矩阵,集团,排序和重新排序的许多组合.
我发现的最接近的点击是
symrcm
将元素移近对角线,但不制作组.
有没有办法重新排序矩阵的行和列,以创建一个密集的角,在R?重点是删除完全空的行和列
请提供此技术的通用名称,以便我可以更有效地谷歌,或指向我的Matlab功能的方向.
我收到错误"预期"('用于函数式转换或类型构造',并尽我所能在线研究此错误的含义,但无法找到导致此错误的原因的任何文档.
我发现错误的Stack Overflow上的所有相关问题修复了特定的代码片段,并没有更一般地解释导致错误的原因.
这些包括
我可以获得一个文档风格的答案,翻译"功能式演员"和"类型构造"的意思是简单的英语吗?什么时候编译器选择抛出此错误而不是其他错误?
我不想要一个特定于我自己的错误的答案,但是根据要求,这是我的MCVE
#include <boost/integer_traits.hpp>
class Test{
const double MAX_DEPTH_VAL = (double) boost::integer_traits<unsigned short>.const_max;
const double MIN_DEPTH_VAL = (double) boost::integer_traits<unsigned short>.const_max;
};
Run Code Online (Sandbox Code Playgroud)
我被引导相信这种语法是可能的,通过这个答案/sf/answers/191700351/
DLDR如何将 cmake 指向 boost-python3 库?cmake 不会自动检测到它。
我正在尝试使用提供的 cmake 为 Python 3.6构建caffe。
我的系统规格:
我已经用 brew 安装了 boost,例如
brew install boost boost-python3
Run Code Online (Sandbox Code Playgroud)
我可以使用find / -name libboost* 2>/dev/null
. 它们出现在三个目录中
/usr/local/Cellar/boost/1.67.0_1/lib/
/usr/local/lib/
-> 符号链接到上面/usr/local/Cellar/boost-python/1.67.0/lib/
如果我运行cmake -DCMAKE_PREFIX_PATH=<anaconda_env_path> -D python_version=3
,我会在输出的顶部得到它
-- Boost version: 1.67.0
-- Found the following Boost libraries:
-- system
-- thread
-- filesystem
-- chrono
-- date_time
-- atomic
Run Code Online (Sandbox Code Playgroud)
但再往下,我也得到
CMake Warning at /Users/Mauceri/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1723 (message): …
Run Code Online (Sandbox Code Playgroud) 我一直在关注 OpenMesh 教程的第一步 -通过一些修改构建一个立方体,我使用的是 TriMesh 而不是 PolyMesh 并且正在构建金字塔而不是立方体。
不知何故,PolymeshT::add_face:complex edge
我的第二张脸和第三张脸都出现了错误。这些面应该在点 (0,0,0)、(0,1,0) 和 (0,0,1) 以及点 (0,0,0)、(0,0,1) 和(1,0,0)。
当每个面被构造为 (0,0,0) 到 (0,1,0) 和 (0,0,0) 到 (0,0,1) 时,两条边已经存在,但我应该能够在其中创建面一些边缘已经存在,不是吗?
到目前为止我尝试过的解决方案
我无法发现我正在做的与教程不同的任何其他事情。
#include <OpenMesh/Core/IO/MeshIO.hh>
#include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh>
typedef OpenMesh::TriMesh_ArrayKernelT<> MyTriMesh;
// Make a pyramid
int main()
{
MyTriMesh tin;
// generate vertices
MyTriMesh::VertexHandle vhandle[4];
vhandle[0] = tin.add_vertex(MyTriMesh::Point(0, 0, 0));
vhandle[1] = tin.add_vertex(MyTriMesh::Point(0, 1, 0));
vhandle[2] = tin.add_vertex(MyTriMesh::Point(1, 0, 0));
vhandle[3] = tin.add_vertex(MyTriMesh::Point(0, 0, 1));
// …
Run Code Online (Sandbox Code Playgroud) 我正在尝试加载预训练的网络,但出现以下错误
F1101 23:03:41.857909 73 net.cpp:757]无法从图层'fc4'复制参数0权重;形状不匹配。源参数形状为512 4096(2097152);目标参数形状为512 256 4 4(2097152)。要从头开始学习该层的参数,而不是从保存的网络中复制,请重命名该层。
我注意到512 x 256 x 4 x 4 == 512 x 4096,因此似乎在保存和重新加载网络权重时,层以某种方式变得平坦。
如何解决此错误?
我正在尝试在此GitHub存储库中使用D-CNN预训练的网络。
我用
import caffe
net = caffe.Net('deploy_D-CNN.prototxt', 'D-CNN.caffemodel', caffe.TEST)
Run Code Online (Sandbox Code Playgroud)
prototxt文件是
name: "D-CNN"
input: "data"
input_dim: 10
input_dim: 3
input_dim: 259
input_dim: 259
layer {
name: "conv1"
type: "Convolution"
bottom: "data"
top: "conv1"
convolution_param {
num_output: 64
kernel_size: 5
stride: 2
}
}
layer {
name: "relu1"
type: "ReLU"
bottom: "conv1"
top: "conv1"
}
layer { …
Run Code Online (Sandbox Code Playgroud) python machine-learning image-processing computer-vision caffe