
發布
注冊
/
登錄數組操作
關注創建者:匿名 創建時間:2026-01-04

數組操作的實例教程
numpy的數值計算實際上調用的是c語言操作,按道理計算速度應該不會慢才對。
1
numpy的數組操作
在計算量集中的程序中,使用numpy內置的函數操作能夠有效地提高計算性能。下面來舉一個例子,考慮到CFD中經常會遇到如下的迭代式:
假設給定初始值,可以通過迭代計算得到的值。
采用迭代方法的代碼可寫成以下形式。
import numpy as np
u = np.array([0,1,2,3,4,5])
un= u.copy()
for i in range(1,len(u)):
print(u[i] - u[i-1])
輸出結果為:
1
1
1
1
1
其實可以改用numpy內置數組操作來實現,代碼寫成以下形式。
import numpy as np
u = np.array([0,1,2,3,4,5])
print(u[1:] - u[0:-1])
輸出結果為:
[1 1 1 1 1]
兩者結果一致。這里采用numpy數組分片功能來進行計算,來看看u[1:]與u[0:-1]到底是多少。
展開 它們提供 SIMD(單指令多數據)處理單元,可以加速復雜的并行數組操作。正如人們經常指出的那樣,HPC GPU 市場在一定程度上要歸功于規模大得多(約 7 倍)的游戲市場,它幫助支付了硬件成本,讓游戲玩家能夠飛越星系,同時允許科學家模擬星系。
加密貨幣市場改變了這種低端動態。就加密貨幣而言,游戲 GPU 非常擅長快速查找唯一數字并產生熱量。市場需求相當高,但由于加密市場的不斷發展,需求似乎正在下降。
在高端,情況就完全不同了。根據雅虎財經的一篇文章,Reports Insights 的一份報告預測:
“受圖形處理器 (GPU) 科學模擬、數據分析和人工智能需求不斷增長的推動,全球圖形處理器 (GPU) 市場預計在 2022 年至 2030 年期間復合年增長率為 33.5%。“
數據顯示,2022 年,GPU 市場估值為447 億美元,預計到 2030 年將達到4509 億美元。GPU 市場的增長可歸因于游戲、娛樂和數據中心等各種最終用途行業對高級圖形和高質量視覺體驗的需求不斷增長。虛擬和增強現實的日益普及以及人工智能和機器學習的進步也促進了 GPU 市場的增長。隨著高性能 GPU 需求的增長,市場有望在未來幾年大幅增長,為市場參與者帶來大量機會。
然而,對于 GPU 市場供應商來說,這是個好消息,對于最終用戶來說,LLM(大型語言模型,例如 ChatGPT)的增長創造了對嚴格意義上不屬于傳統 HPC 市場一部分的 GPU 的新需求。
以 Inflection AI 為例,該公司正在開發一種名為“Pi”的“個人人工智能”聊天機器人。為了實現這一目標,該公司建造了一臺配備 22,000 個 NVIDIA H100 GPU 的 超級計算機。
展開 *VFILL命令可以用來填充一個一般的數組或表數組的列向量。具體見ANSYS幫助文檔。
例如:
*VFILL,LABEL(1),DATA,'S1','S2','S3','S4','S5'
3)用*VREAD或者*TREAD命令。*VREAD或者*TREAD命令可將數據文件填充到數組中去。具體見ANSYS幫助文檔。
3:數組參數的刪除與標量參數相同。
4:數組參數操作的GUI。Utility Menu->Parameters->Array Parameters。下面又四個子菜單,可以進行上述所有的操作。
【更多資訊信息請關注《CAE技術聯盟》官方微信】
展開 11
通過地址和索引實現數組
接下來是基址寄存器和變址寄存器,通過這兩個寄存器,可以對主存上的特定區域進行劃分,以此實現類似數組的操作。
首先,可以用十六進制數將計算機內存上的00000000 - FFFFFFFF的地址劃分出來。
這樣,凡是該范圍的內存地址,只要有一個32位的寄存器,就可以查看全部地址。
但是,要是想像數組那樣,分割特定的內存區域以達到連續查看的目的的話,使用兩個寄存器會更方便一些,比如,我們用兩個寄存器來表示內存的值。
這種表示方式很像數組的構造,數組是指同樣長度的數據,在內存中進行連續排列的數據構造。
用數組名表示數組全部的值,通過索引來區分數組的各個數據元素,例如: a[0] - a[4],[]內的 0 - 4 就是數組的下標。
12
CPU指令執行過程
那說了這么多,CPU到底是怎么一條條的執行指令的呢?幾乎全部的馮·諾伊曼型計算機的CPU,工作都可以分為5個階段:取指令、指令譯碼、執行指令、訪存取數、結果寫回。
展開 所需的優化函數已經在當前文件中定義,打開評價函數編輯器如下圖所示:
用操作數5和8分別用于最大化空間均勻性和總光通量,用操作數10和11來控制光強分布的質心,用操作數13用來控制光強分布的均方根半徑。希望輸出光線不是完全平行的,而是限制在一定的視角范圍內,因此,指定了30°作為目標視角。最后一組操作數 (15-18) 是邊界約束,以防止陣列變得太大或太小,當無邊界約束時,優化會有產生極限解的趨勢。注意這些操作數的負數權重,它們就像拉格朗日乘數一樣工作,迫使目標得以實現。
優化分配的變量如下:
球面物體:半徑
陣列物體:Number X’ & Y’, Delta1 X’ & Y’, Delta2 Y’
由于對稱性的考慮,陣列只需要在y方向上是非線性的。因此只在X方向上分配線性陣列的間距 (Delta1 X ') 。此外,優化時很可能不需要陣列的三階和四階參數可變,所以不將其設為變量。
如果給變量一個有限初始值,而不是從零開始,通常會使優化更有效。為了確定二階y方向的起始點,查看通用繪圖并與評價函數中的值進行對比。打開一維通用圖(分析 (Analysis) >通用繪圖 (Universal Plot))并應用以下設置。
點擊OK鍵,并進行繪圖更新;這個過程可能需要幾分鐘,具體所需時長取決于電腦的速度。根據下圖,將陣列物體上的“ Delta2 Y ”參數設置為5E-3。
背光源設計形式是固定的,只需要優化陣列參數。考慮到這一事實,使用正交下降 (OD) 算法進行錘形優化對于達到目標非常有效。錘形優化在長時間運行時性能最好,完成之后可以確定沒有與起點相似的更好的設計。在運行錘形優化約20小時后,OpticStudio得出了具有良好空間均勻性和可接受的發光強度的解。
展開 
數組操作的相關專題、標簽、搜索
數組操作的最新內容
最后一組操作數 (15-18) 是邊界約束,以防止陣列變得太大或太小,當無邊界約束時,優化會有產生極限解的趨勢。注意這些操作數的負數權重,它們就像拉格朗日乘數一樣工作,迫使目標得以實現。
優化分配的變量如下:
球面物體:半徑
陣列物體:Number X’ & Y’, Delta1 X’ & Y’, Delta2 Y’
由于對稱性的考慮,陣列只需要在y方向上是非線性的。
它需要并行執行
它需要順序執行
要處理數組,其操作需要 DSP
它是通用處理所必需的。
該處理器使用兩種尋址模式,即直接和間接
微處理器中使用的一些尋址模式是直接、立即、寄存器間接、間接寄存器等。
最后一組操作數 (15-18) 是邊界約束,以防止陣列變得太大或太小,當無邊界約束時,優化會有產生極限解的趨勢。注意這些操作數的負數權重,它們就像拉格朗日乘數一樣工作,迫使目標得以實現。
優化分配的變量如下:
球面物體:半徑
陣列物體:Number X’ & Y’, Delta1 X’ & Y’, Delta2 Y’
由于對稱性的考慮,陣列只需要在y方向上是非線性的。
它們提供 SIMD(單指令多數據)處理單元,可以加速復雜的并行數組操作。正如人們經常指出的那樣,HPC GPU 市場在一定程度上要歸功于規模大得多(約 7 倍)的游戲市場,它幫助支付了硬件成本,讓游戲玩家能夠飛越星系,同時允許科學家模擬星系。
加密貨幣市場改變了這種低端動態。就加密貨幣而言,游戲 GPU 非常擅長快速查找唯一數字并產生熱量。
最后一組操作數 (15-18) 是邊界約束,以防止陣列變得太大或太小,當無邊界約束時,優化會有產生極限解的趨勢。注意這些操作數的負數權重,它們就像拉格朗日乘數一樣工作,迫使目標得以實現。
優化分配的變量如下:
球面物體:半徑
陣列物體: Number X’ & Y’, Delta1 X’ & Y’, Delta2 Y’
由于對稱性的考慮,陣列只需要在y方向上是非線性的。
如果讀寫依賴發生在操作數組時,許多編譯器不能自動優化代碼以避免讀寫依賴。所以推薦程序員手動去消除讀寫依賴,舉例來說,引進一個可以保存在寄存器中的臨時變量。這樣可以有很大的性能提升。下面一段代碼是一個例子:
不好的代碼:
float x[VECLEN], y[VECLEN], z[VECLEN];
。。。。。。
11
通過地址和索引實現數組
接下來是基址寄存器和變址寄存器,通過這兩個寄存器,可以對主存上的特定區域進行劃分,以此實現類似數組的操作。
首先,可以用十六進制數將計算機內存上的00000000 - FFFFFFFF的地址劃分出來。
把數組的地址賦值給指針,然后用指針操作數組
#include "sys.h"
#include "led.h"
#include "delay.h"
#include "usart.h"
char temp[3]={1,2,3};
char *p;
int main(void)
{
uart_init(115200);//串口初始化
delay_init();
p=temp;
1
numpy的數組操作
在計算量集中的程序中,使用numpy內置的函數操作能夠有效地提高計算性能。下面來舉一個例子,考慮到CFD中經常會遇到如下的迭代式:
假設給定初始值,可以通過迭代計算得到的值。
4:數組參數操作的GUI。Utility Menu->Parameters->Array Parameters。下面又四個子菜單,可以進行上述所有的操作。
【更多資訊信息請關注《CAE技術聯盟》官方微信】