精华内容
下载资源
问答
  • 以下能对二维数组a进行正确初始化的语句是()。 正确答案: B 你答案: D (错误) int a[2][ ]={{1,0,1},{5,2,3}}; int a[ ][3]={{1,2,3},{4,5,6}}; int a[2][4]={{1,2,3},{4,5},{6}}; int a[ ][3]={{1,0,1},{},{...

    以下能对二维数组a进行正确初始化的语句是()。
    正确答案: B 你的答案: D (错误)

    int a[2][ ]={{1,0,1},{5,2,3}};
    int a[ ][3]={{1,2,3},{4,5,6}};
    int a[2][4]={{1,2,3},{4,5},{6}};
    int a[ ][3]={{1,0,1},{},{1,1}};

    【解释】定义二维数组并赋初值时,可以省略第一维的大小,但不能省略第二维的大
    小,所以A是错误的;对于C来说,定义的数组a是2行4列的数组,但赋初值却包含了
    3行,所以是错误的;D中初值列表中有一行是空的,这在C语言中是不允许的,所以也
    是错误的;B定义了2行3列的二维数组并对其赋初值,是正确的,所以正确答案是B

    展开全文
  • Java多维数组声明格式

    千次阅读 2019-04-20 22:49:42
    刷题目再次遇到了声明这种最基本形式的考题,以此记录,...而arr11、arr12则是等式右边二维数组初始化时没有赋予初始大小导致报错。 正确的声明形式如下: 本质上arr0、arr4和arr3、arr8是一样的; 而arr1-2和arr5-...

    刷题目再次遇到了声明这种最基本形式的考题,以此记录,共勉。

    关于多维数组声明的形式你知道哪几种呢?

    首先先上一个错误的例子:
    2

    这里arr9 - arr11在等式右边都错误的在中括号中加了数组大小,导致报错;
    而arr11、arr12则是等式右边二维数组初始化时没有赋予初始大小导致报错。

    正确的声明形式如下:
    1
    本质上arr0、arr4和arr3、arr8是一样的;

    而arr1-2和arr5-6则是以一种俏皮的方式进行了声明,虽然也是可以通过编译运行的,但是我的IDE上的阿里代码规约还是建议使用arr0、arr4 或者 arr3、arr8这种形式。
    3
    大家只要知道可以这样子声明即可,实际工作中为了方便他人查看代码,还是遵守一些规约吧!


    这里献上代码以供大家到IDE中测试:

        int[][] arr0 = new int[2][2];
        int arr1[][] = new int[2][2];
        int []arr2[] = new int[2][2];
        int [][]arr3 = new int[2][2];
    
        int[][][] arr4 = new int[2][2][2];
        int arr5[][][] = new int[2][2][2];
        int []arr6[][] = new int[2][2][2];
        int [][]arr7[] = new int[2][2][2];
        int [][][]arr8 = new int[2][2][2];
    

    最近在找实习,压力有点大,写点博客减减压。

    展开全文
  • blog可能排版更好点 ...不要试图去开大数据量的二维数组 一旦你初始化一个3k✖️3k的数据 你就会发现即使你只是读一下这个数组就会死慢死慢 还要频繁写入 效率可想而知 正确的姿势 应该是开一个一维的数组 然...

    blog可能排版更好点

    Github

    Update 一下

    跟室友讨论了一下 才发现有一些我以为很理所应当的点 才是优化的关键 (当然你们看我的code应该也能看出来 只是没点明白)

    Optimize Point

    1. 不要试图去开大数据量的二维数组
    • 一旦你初始化一个3k✖️3k的数据 你就会发现即使你只是读一下这个数组就会死慢死慢 还要频繁写入 效率可想而知
    • 正确的姿势 应该是开一个一维的数组 然后每次存入一个3k数组的Index
    • 这么做是有道理的
      • 首先实际数组 相对于动态开起来的
      • 然后我们存在一维数组里的 实际上是Index值 这个会快很多
      • 而且存进去的数组 是Immutable-不(可)更改的 不需要update 这个又会快很多
      • 于是乎 这就是第一个bonus Ponit
    1. 要用Numpy的矩阵乘法 ?不要手写
    • 虽然 我不知道它的内部实现机理 但真的很快
    • 快到瞠目结舌 3k✖️6w的矩阵相乘 10s不到
    • 这 我3k✖️3k遍历一遍就要1min
    1. 可以考虑动态对齐词矩阵 降低词向量维数
    • 目前我们是按所有文章中词向量维数为所有词向量的长度 大约6w维
    • 如果按每个article为粒度 用动态对齐的方式 可以省很多空间
    • 我之所以没这么干
      • 因为我tf做了smooth操作 所有零项 不能简单的补零 复杂度较高
      • 然后动态补零 就不能用numpy的矩阵乘法 就很伤
    1. 另外就是通过开线程实现加速操作

    剩下的看代码应该就会懂得 (这样应该干货多了吧)

    然后吕同学提的预处理的问题 挺好的 词性确实很重要

    做了个小统计发现整个词袋里面有5477个词有多重词性的 高等词还有8个词性 so 呢


    VSM很简单 但hand write起来 还是会有一些问题的

    Preproccess

    额 我们拿到的文本 虽然已经分词好了 但 并不是很能用

    所以我们需要预处理

    对于这种文本的预处理 shell是最好的选择 (不是php 手动滑稽)

    shell 或者说bash脚本 性能对于这种文本处理基本上是秒级的

    图片.png | center | 556x500

    可以看出好像前面15位的 代表ArticleId 属于同一个文章

    然后虽然分词过了 但有很多分隔符什么/ n, / c, / vn

    本来我是想枚举的 但发现 好像26个字母都有 真的恐怖

    然后不只有这些 还有中文标点 什么《》, ()的 也得去掉

    然后整理一下就变成了

    图片.png | center | 556x500

    性能方面 虽然没打时间 但基本上秒级

    附上code

    # @Author: gunjianpan
    # @Date:   2018-11-11 19:11:19
    # @Last Modified by:   gunjianpan
    # @Last Modified time: 2018-11-11 20:26:47
    
    cp data.txt test
    # Set Tag Where File End
    echo '1' >> test
    
    # According article to jonit string
    # @1: Remove blank lines
    # @2: split by ‘/x’ or ‘/xx’
    #     then, jonit string until into another article(recognition by $1)
    # @return: Plain text which one plain one artile
    sed - n '/./p' test | awk '{split($0,a,"/. |/.. ");b="";for(i=3;i<length(a);i++){b=b" "a[i];}if(!last||last==substr($1,0,15)){total=total""b;}else{print substr(total,2);total=b;}last=substr($1,0,15)}' >> test2
    
    # Remove Chinese punctuation
    # @1: replace punctuation Chinese or English to blank
    # @2: replace mutil-blank to one-blank
    sed 's/[;:,。()?!《》【】{}“”、——;:,.()?!_]/ /g' test2 | sed 's/[ ][ ]*/ /g' >> test3
    

    VSM

    VSM分三步

    1. 词长度对齐
    2. TF - IDF(考虑平滑, similarity 方式)
    3. one by one calaulate

    思路很简单

    我一开始觉得 TF - IDF计算需要针对每个(article1, article2)进行计算

    因为需要对齐 而且最关键要平滑

    如果有个词article1没有,article2也没有 如何计算tf的时候因为进行平滑处理 就会占一定比例 这对于那些高词频的 word就不太友好

    于是我第一版 就 一个个遍历过去 3100✖️3100 (见VSM.vsmCalculate()

    看起来 没啥 乘起来就是500w

    初始化数组就要1min

    于是开了两级多线程

    1. 每行为一个线程
    2. 每行里面每组similarity计算为一个线程

    但效果很差 因为那么多个线程争夺写一个3100✖️3100的numpy.Array 出现了写阻塞现象

    通过Activity Monitor观察 实际上线程数只有5.6左右

    把numpy.Array换成list 发现效率高了一点 还是不行

    于是 想能不能不同时争夺写一个list 直接每一行维护一个list 直接写文件

    发现效率提高很多 基本上1s能处理500个数据

    那500w需要3h+

    于是牺牲一下精确度 先按词袋里所有词 对齐词向量(见VSM.vsmTest()

    如何先生成3100篇文章的词向量组(tf - idf之后)

    再做一次 A.dot(A.T)就可以得到结果

    实际效果总耗时215s 约3min 效果较好

    然后一次误输出 发现内存中的中间状态数组已经到了4.3G

    额 内存小的同学可能就比较尴尬了

    图片.png | center | 556x500

    图片.png | center | 556x500

    关于隐语义等考完试再来弄

    之前写过一篇关于时序分析相关内容RNN家族的blog

    # -*- coding: utf-8 -*-
    # @Author: gunjianpan
    # @Date:   2018-11-11 20:27:41
    # @Last Modified by:   gunjianpan
    # @Last Modified time: 2018-11-13 01:07:16
    
    import math
    import numpy as np
    import pandas as pd
    import threading
    import time
    
    
    class VSM():
      """
      handle write vsm ?
      """
    
      def __init__(self):
        self.articleMaps = []
        self.articleNum = 0
        self.process = 0
        self.resultArray = []
        self.wordMaps = {}
        self.preData()
    
      def preData(self):
        """
        data prepare
        """
        begin_time()
        file_d = open('test3', 'r')
        articles = file_d.readlines()
        threadings = []
        self.articleNum = len(articles)
        self.articleMaps = [None for i in range(self.articleNum)]
        self.resultArray = [None for i in range(self.articleNum)]
        for index in range(self.articleNum):
          work = threading.Thread(target=self.preDataBasic, args=(
              articles[index].strip('\n').rstrip(), index,))
          threadings.append(work)
        for work in threadings:
          work.start()
        for work in threadings:
          work.join()
        end_time()
    
      def preDataBasic(self, article, articleId):
        """
        prepare data basic in Threading
        @param article: article string
        @param articleId: article id
        """
        words = article.split(' ')
        wordMap = {}
        for word in words:
          if word in wordMap:
            wordMap[word] = wordMap[word] + 1
          else:
            wordMap[word] = 1
        for word in wordMap:
          if word in self.wordMaps:
            self.wordMaps[word] = self.wordMaps[word] + 1
          else:
            self.wordMaps[word] = 1
        self.articleMaps[articleId] = wordMap
    
      def tfidfTest(self, wordMap):
        """
        calculate tdidf value
        td use Augmented Frequency 0.5 + 0.5 * fre/maxFre
        """
    
        wordlist = [wordMap[i] for i in [*wordMap]]
        maxFrequency = max(wordlist)
        tf = np.array([0.5 + 0.5 * index / maxFrequency for index in wordlist])
        idf = np.array([math.log(self.articleNum / self.wordMaps[word])
                        for word in [*wordMap]])
        tfidf = tf * idf
        return tfidf
    
      def tfidf(self, wordMap):
        """
        calculate tdidf value
        td use Augmented Frequency 0.5 + 0.5 * fre/maxFre
        """
    
        wordlist = [wordMap[i] for i in [*wordMap]]
        maxFrequency = max(wordlist)
        tf = np.array([0.5 + 0.5 * index / maxFrequency for index in wordlist])
        idf = np.array([math.log(self.articleNum / (1 + self.wordMaps[word]))
                        for word in [*wordMap]])
        tfidf = tf * idf
        return tfidf / np.linalg.norm(tfidf, ord=2)
    
      def preSimilarity(self, wordMap, index):
        """
        align map and then calculate one tfidf
        """
        tempMap = {
            index: wordMap[index] if index in wordMap else 0 for index in self.wordMaps}
        preMap = {**wordMap, **tempMap}
        self.resultArray[index] = self.tfidf(preMap)
        self.process += 1
        if not self.process % 100:
          print(self.process)
    
      def vsmTest(self):
        """
        once to calaulate vsm
        """
        begin_time()
        threadings = []
        for index in range(self.articleNum):
          work = threading.Thread(target=self.preSimilarity, args=(
              self.articleMaps[index], index,))
          threadings.append(work)
        for work in threadings:
          work.start()
        for work in threadings:
          work.join()
        tempMatrix = np.array(self.resultArray)
        result = tempMatrix.dot(tempMatrix.T)
        df = pd.DataFrame(result)
        df.to_csv("vsm1.csv", header=False)
        end_time()
    
      def preSimilarityTest(self, wordMap1, wordMap2):
        """
        align map and then calculate one tfidf
        """
        tempMap1 = {
            index: wordMap1[index] if index in wordMap1 else 0 for index in wordMap2}
        preMap1 = {**wordMap1, **tempMap1}
        return self.tfidfTest(preMap1)
    
      def similarity(self, wordMap1, wordMap2, types):
        """
        calculate similarity by cos distance
        @Param types: distance calculate type
                    =0 Cos Distance
                    =1 Chebyshev Distance
                    =2 Manhattan Distance
                    =3 Euclidean Distance
        """
        tfidf1 = self.preSimilarityTest(wordMap1, wordMap2)
        tfidf2 = self.preSimilarityTest(wordMap2, wordMap1)
        if not types:
          return np.dot(tfidf1, tfidf2) / (np.linalg.norm(tfidf1, ord=2) * np.linalg.norm(tfidf2, ord=2))
        elif types == 1:
          return np.abs(tfidf1 - tfidf2).max()
        elif types == 2:
          return np.sum(np.abs(tfidf1 - tfidf2))
        elif types == 3:
          return np.linalg.norm(tfidf1 - tfidf2)
        else:
          return np.shape(np.nonzero(tfidf1 - tfidf2)[0])[0]
    
      def vsmCalculate(self):
        """
        calculate vsm
        """
        #: todo write block
        begin_time()
        threadings = []
        for index1 in range(self.articleNum):
          work = threading.Thread(target=self.vsmThread, args=(index1,))
          threadings.append(work)
        for work in threadings:
          work.start()
        for work in threadings:
          work.join()
        end_time()
    
      def vsmThread(self, index1):
        """
        vsm threading
        """
        nowarticle = self.articleMaps[index1]
        tempResult = []
        for index2 in range(index1, self.articleNum):
          tempResult.append(self.vsmPre(
              nowarticle, self.articleMaps[index2]))
    
        df = pd.DataFrame({index1: tempResult})
        df.to_csv('vsm.csv', mode='a', header=False)
    
      def vsmPre(self, wordMap1, wordMap2):
        """
        load data to result
        prevent read block
        """
    
        self.process += 1
        if not self.process % 100:
          print(self.process)
        return self.similarity(wordMap1, wordMap2, 0)
    
    
    start = 0
    
    
    def begin_time():
      global start
      start = time.time()
    
    
    def end_time():
      print(time.time() - start)
    

    祝大家考试顺利?

    展开全文
  • 2021-01-03

    2021-01-03 11:58:22
    关于二维数组初始化会不会自动填充 C/C++规定,如果用初始化列表对数组进行显式初始化,且没有填充完定义的数组空间时候,剩下的空间中每一个元素都隐式地初始化为零。 所以LZ说的定义方法是正确的。但语法上有问题...

    关于二维数组初始化会不会自动填充
    C/C++规定,如果用初始化列表对数组进行显式初始化,且没有填充完定义的数组空间时候,剩下的空间中每一个元素都隐式地初始化为零。
    所以LZ说的定义方法是正确的。但语法上有问题,定义时必须有数组名且以;结束,例如int a[3][4]={{1,1}};这样才是正确的定义。
    PS
    1.对于全局/静态对象的定义,如果没有初始化列表,所有元素都会被隐式初始化为零;
    2.C++对于初始化列表中元素个数超出定义的数组大小时会产生编译错误(C中只有警告)。

    展开全文
  • //先用二维数组读入位图信息 unsigned char *pBMP;//读入图像数据数组 unsigned char *unpBMP; char *filemsg;//存位图文件头信息 char *BMPmsg;//存位图信息头信息 int *s, *l, *b;//s[i]:表示从0到i压缩...
  • 书中列出了C用户经常问400多个经典问题,涵盖了初始化数组、指针、字符串、内存分配、库函数、C预处理器等各个方面主题,并分别给出了解答,而且结合代码示例阐明要点。 本书结构清晰,讲解透彻,是各高校相关...
  • 书中列出了C用户经常问400多个经典问题,涵盖了初始化数组、指针、字符串、内存分配、库函数、C预处理器等各个方面主题,并分别给出了解答,而且结合代码示例阐明要点。  本书结构清晰,讲解透彻,是各高校...
  • 作者在网络版CFAQ列表基础上进行了大幅度扩充和丰富,结合代码示例,权威而且详细深入地解答了实际学习和工作中最常遇到495个C语言问题,涵盖了初始化数组、指针、字符串、内存分配、库函数、C预处理器等...
  • 6.18 当我向一个接受指针指针函数传入二维数组的时候,编译器报错了。  6.19 我怎样编写接受编译时宽度未知的二维数组的函数?  6.20 我怎样在函数参数传递时混用静态和动态多维数组?  数组大小  6.21...
  • 不同编译器给出不同的i值,有的为3,有的为4,哪个是正确的? *3.4 有这样一个巧妙的表达式:a^=b^=a^=b;它不需要临时变量就可以交换a和b的值。 3.5 可否用显式括号来强制执行我所需要的计算顺序并控制相关的副...
  • Java选择题

    2021-02-22 17:09:22
    1.下列关于Java类中方法的定义,正确的是() 正确答案: D 你的答案: D (正确) 若代码执行到return语句,则将当前值返回,而且继续执行return语句后面的...2.已知 声明并初始化二维数组 int a[ ][ ]={{1,2},{3,4},{5
  • 6.18 当我向一个接受指针指针函数传入二维数组的时候,编译器报错了。 6.19 我怎样编写接受编译时宽度未知的二维数组的函数? 6.20 我怎样在函数参数传递时混用静态和动态多维数组? 数组大小 6.21 当数组...
  • 这里应说明的是并不是把整个字符串装入指针变量, 而是把存放该字符串的字符数组的首地址装入指针变量。 在后面还将详细介绍。 ⑥把函数的入口地址赋予指向函数的指针变量。例如: int (*pf)();pf=f; /*f为函数名*...
  • ~第1章 声明和初始化 1 基本类型 1 1.1 我该如何决定使用哪种整数类型? 1  1.2 为什么不精确定义标准类型大小? 2 1.3 因为C语言没有精确定义类型大小,所以我一般都用typedef定义int16和int32。然后...
  • 《你必须知道495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    书中列出了C用户经常问400多个经典问题,涵盖了初始化数组、指针、字符串、内存分配、库函数、C预处理器等各个方面主题,并分别给出了解答,而且结合代码示例阐明要点。 《你必须知道495个C语言问题》结构...
  • 最后,读者将学习如何创建二维数组以及如何使用嵌套循环来处理它们。 第6章:分支语句和逻辑操作符 如果程序可以根据实际情况调整执行,我们就说程序能够智能地行动。在本章,读者将了解到如何使用if 、if else...
  • 最后,读者将学习如何创建二维数组以及如何使用嵌套循环来处理它们。 第6章:分支语句和逻辑操作符 如果程序可以根据实际情况调整执行,我们就说程序能够智能地行动。在本章,读者将了解到如何使用if 、if else...
  • 最后,读者将学习如何创建二维数组以及如何使用嵌套循环来处理它们。 第6章:分支语句和逻辑操作符 如果程序可以根据实际情况调整执行,我们就说程序能够智能地行动。在本章,读者将了解到如何使用if 、if else...
  • 你必须知道495个C语言问题(PDF)

    热门讨论 2009-09-15 10:25:47
    3, 有的为4, 哪个是正确的? . . . . . . . . . . . . . . . . . . . . . 14 3.4 这是个巧妙的表达式: a ˆ= b ˆ= a ˆ= b 它不需要临时变量就可 以交换a 和b 的值。. . . . . . . . . . . . . . . . . . . . . . ....
  • o 7.15 当我向一个接受指针指针函数传入二维数组的时候, 编译器报错了。 o 7.16 我怎样编写接受编译时宽度未知的二维数组的函数 ? o 7.17 我怎样在函数参数传递时混用静态和动态多维数组 ? o 7.18 当数组...
  • 实例043 将二维数组行列互换 实例044 利用数组随机抽取幸运观众 实例045 用数组设置JTable表格列名与列宽 3.2 数组操作 实例046 数组下标界限 实例047 按钮控件数组实现计数器界面 实例048 复选框...
  • 实例043 将二维数组行列互换 实例044 利用数组随机抽取幸运观众 实例045 用数组设置JTable表格列名与列宽 3.2 数组操作 实例046 数组下标界限 实例047 按钮控件数组实现计数器界面 实例048 复选框...
  • 正确使用单例模式是引起内存泄露一个常见问题,单例对象在被初始化后将在JVM整个生命周期中存在(以静态变量方式),如果单例对象持有外部对象引用,那么这个外部对象将不能被jvm正常回收,导致内存泄露,...
  • 实例043 将二维数组行列互换 53 实例044 利用数组随机抽取幸运观众 54 实例045 用数组设置JTable表格列名与列宽 55 3.2 数组操作 57 实例046 数组下标界限 57 实例047 按钮控件数组实现计数器界面 58 实例...
  • 实例043 将二维数组行列互换 53 实例044 利用数组随机抽取幸运观众 54 实例045 用数组设置JTable表格列名与列宽 55 3.2 数组操作 57 实例046 数组下标界限 57 实例047 按钮控件数组实现计数器界面 58 实例...
  • //初始化构造函数 virtual ~Matrix(); // 析构函数 //类型转换函数 operator int(); operator double(); operator char* (); //私有域获取函数 DATATYPE getDataType(); INT getNumDims(); ...
  • 高级Shell脚本编程

    2013-10-28 10:08:19
    2. 带着一个Sha-Bang出发(Sha-Bang指的是#!) 2.1. 调用一个脚本 2.2. 初步的练习 第部分. 基本 3. 特殊字符 4. 变量和参数的介绍 4.1. 变量替换 4.2. 变量赋值 4.3. Bash变量是不区分类型的 4.4. 特殊的...
  • 数据结构(C++)有关练习题

    热门讨论 2008-01-02 11:27:18
    内容及步骤: 1、 设有一个线性表(e0,e1,e2,e3,…,en-2,en-1)存放在一个一维数组A[arraySize]中前n个数组元素位置。请编写一个函数将这个线性表原地逆置,即将数组前n个原地址内容置换为(en-1,en-2,…,e3,...

空空如也

空空如也

1 2 3
收藏数 49
精华内容 19
关键字:

关于二维数组初始化正确的是