我想在Java中逐行读取文件.每行都作为项添加到数组中.问题是,当我逐行阅读时,我必须根据文件中的行数创建数组.
我可以使用两个单独的while循环,一个用于计数,然后创建数组,然后添加项目.但它对大文件效率不高.
try (BufferedReader br = new BufferedReader(new FileReader(convertedFile))) {
String line = "";
int maxRows = 0;
while ((line = br.readLine()) != null) {
String [] str = line.split(" ");
maxColumns = str.length;
theRows[ maxRows ] = new OneRow( maxColumns ); // ERROR
theRows[ maxRows ].add( str );
++maxRows;
}
}
catch (FileNotFoundException e) {
System.out.println(e.getMessage());
}
catch (IOException e) {
System.out.println(e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)
考虑private OneRow [] theRows;并OneRow定义为String [].该文件看起来像
Item1 Item2 Item3 …Run Code Online (Sandbox Code Playgroud) 在读取GPU的存储层次时,我会看到一些类似的术语,并且由于在过去的版本中进行了一些体系结构修改,因此我不知道它们可以一起使用还是具有不同的含义。设备是M2000,计算兼容性为5.2。
顶层(最接近管道)是统一的L1 /纹理缓存,每个SM为24KB。难道是统一的指令和数据呢?
在此之下,是L2缓存,也称为共享内存,由所有SM共享。根据./deviceQuery,L2大小为768KB。如果这是合计值,则每个SM具有768KB / 6 = 128KB。但是,根据编程指南,共享内存为96KB。
那么什么是恒定内存,它驻留在哪里?在deviceQuery和nvprof指标中都没有有关其大小的信息。编程指南说:
所有线程还可以访问两个附加的只读存储空间:常量存储空间和纹理存储空间。全局,常量和纹理内存空间针对不同的内存使用进行了优化(请参阅设备内存访问)。纹理存储器还为某些特定的数据格式提供了不同的寻址模式以及数据过滤(请参见纹理和表面存储器)。
全局,常量和纹理存储空间在同一应用程序的内核启动之间是持久的。
L2下面是全局内存,称为设备内存,可以是2GB,4GB和...
我已经scikit-learn 0.23.2通过安装pip3,但是,我从我的代码中收到此错误
Traceback (most recent call last):
File "pca_iris.py", line 12, in <module>
X = StandardScaler().fit_transform(X)
NameError: name 'StandardScaler' is not defined
Run Code Online (Sandbox Code Playgroud)
我在网上搜索并看到类似的主题,但是版本是正确的,我不知道该怎么做。该行import sklearn位于脚本的顶部。
任何想法?
我对工作方式有疑问cudaFree。在下面的代码中,为了在设备上分配数组,cudaMalloc需要数组的地址。这是通过使用&array_d.
int *array_d;
cudaMalloc((void**)&array_d, sizeof(int) * 100);
cudaFree(array_d);
Run Code Online (Sandbox Code Playgroud)
从逻辑上讲,当我们想要释放内存时,我们cudaFree还必须传递数组地址。否则,它如何知道哪部分内存必须被释放?
对于这段代码,我使用data()向量的方法来访问其元素:
#include <iostream>
#include <vector>
int main ()
{
std::vector<int> myvector (5);
int* p = myvector.data();
*p = 10;
++p;
*p = 20;
p[2] = 100;
std::cout << "myvector contains:";
for (unsigned i=0; i<myvector.size(); ++i)
std::cout << ' ' << myvector[i];
std::cout << '\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这会产生
myvector contains: 10 20 0 100 0
Run Code Online (Sandbox Code Playgroud)
问题是为什么p[2]是0?假设myvector.data()是一个指向第一个元素(索引 0)的指针,那么p[0]就是 10 就可以了。++p指向下一个元素,即p[1]20,这也很好。现在,p[2]是 后的下一个元素p[1]。所以,顺序应该是10 20 100。这里有什么错误吗?
在"my_header.h"中我定义了
FILE *f;
char *logfile = "my_output.txt";
#define OPEN_LOG f = fopen(logfile, "a")
#define CLOSE_LOG fclose(f)
Run Code Online (Sandbox Code Playgroud)
在"my_source.c"中,我以这种方式使用它
#include "my_header.h"
....
OPEN_LOG;
fprintf(f, "some strings\n");
CLOSE_LOG;
Run Code Online (Sandbox Code Playgroud)
然而链接器说
my_source.o:(.data+0x0): multiple definition of `logfile'
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
grep如果有匹配,我想要一个字符串并剪切一个字段.问题是,无论是否匹配,命令的输出$?都是0,这很奇怪.请参阅下面的输出:
$ R=`grep g09 tor1.sh | cut -d ' ' -f2`
$ echo $R
test
$ R=`grep g09 tor1.sh | cut -d ' ' -f2`
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)
如你所见,有一个匹配但是$?为0.现在看到这个:
$ R=`grep g09 tor.sh | cut -d ' ' -f2`
$ echo $R
$ R=`grep g09 tor.sh | cut -d ' ' -f2`
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)
在这里,g09没有匹配但$?仍为0.为什么?
我想用Perl获取文件的绝对路径.该文件位于/a/b/c/file.txt.所以,我想得到/a/b/c/.我目前无法使用Cwd::cwd(),因为实际的工作目录是/a/b/.这不是一个bug,因为调用了Perl脚本/a/b/.
那么,是否有一个Perl函数来捕获它,或者我是否必须使用正则表达式来找到它?
以下python代码
env.Command(versionFile, allSrcs + [".git/index", "SConstruct"],
'echo "#define ZSIM_BUILDDATE \\""`date`\\""\\\\n#define ZSIM_BUILDVERSION \\""`python misc/gitver.py`\\""" >>' + versionFile)
Run Code Online (Sandbox Code Playgroud)
产生这样的输出
$ cat build/opt/version.h
#define ZSIM_BUILDDATE "Sat Apr 19 13:31:41 CET 2014"\n#define ZSIM_BUILDVERSION "master:10:a8c417b:2fc 3+ 2- d5cec7e7"
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,它不明白这'\n'意味着什么new line+carriage return.相反,它只是打印'\'和'n'.
我该如何解决这个问题?
PS:这个问题是一个跟进这一个.上一篇文章是一般的,没有指出问题.我还使用scons进行构建.任何帮助,将不胜感激.谢谢