当前位置:网站首页>Numpy 的研究仿制 1
Numpy 的研究仿制 1
2022-06-29 15:34:00 【InfoQ】
struct _u_array {
char *start[2];
int axis_n;
};
static size_t
__xd_coord_to_1d_offset(size_t coord[], size_t axes[], int axis_n) {
size_t offset = 0, axis_mulitply;
for (int i=0; i<axis_n; ++i) {
size_t co = coord[i];
axis_mulitply = __axis_mulitply(axes, axis_n, i+1);
offset += co * axis_mulitply;
}
return offset;
}
static void
__1d_offset_to_xd_coord( size_t offset, size_t axes[], int axis_n, size_t coord[])
{
size_t div, mod, i, axis_mulitply, middle_value;
middle_value = offset;
for(i=0; i<axis_n-1; ++i) {
axis_mulitply = __axis_mulitply(axes, axis_n, i+1);
div = middle_value / axis_mulitply;
mod = middle_value % axis_mulitply;
coord[i] = div;
middle_value = mod;
}
coord[i] = mod;
return;
}
- 初始化
/**
* 输入维度数量,例如 3 维
* 输入每一个维度,例如 [3, 3, 3]
*/
u_array_t UArray_create(int axis_n, size_t shape[])
{
if (axis_n >= 0) {
u_array_t n_array;
n_array.axis_n = axis_n;
start[0] = __alloc_shape(axis_n, shape);
start[1] = __alloc_data(__axis_mulitply(shape, axis_n, 0));
return n_array;
}
return ua_unable;
}
- 加载数据
u_array_t* UArray_load(u_array_t* arr, vfloat_t data[])
{
size_t size_arr = UA_size(arr);
vfloat_t* ptr = UA_data_ptr(arr);
memcpy(ptr, data, size_arr);
return arr;
}
- 访问数据
float UArray_get(u_array_t* arr, ...)
{
va_list valist;
va_start(valist, arr);
size_t coord[UA_axisn(arr)];
for (int i=0; i<UA_axisn(arr); ++i) {
coord[i] = va_arg(valist, size_t);
}
va_end(valist);
size_t offset = UA_cover_coordinate(arr, coord);
return ((float*)(UA_data_ptr(arr)))[offset];
}
void UArray_set(u_array_t* arr, ...)
{
va_list valist;
va_start(valist, arr);
size_t coord[UA_axisn(arr)];
vfloat_t value;
for (int i=0; i<UA_axisn(arr); ++i) {
coord[i] = va_arg(valist, size_t);
}
value = va_arg(valist, double);
va_end(valist);
size_t offset = UA_cover_coordinate(arr, coord);
((float*)(UA_data_ptr(arr)))[offset] = value;
return;
}
int main()
{
// 定义一个 3 维的 ultra_array
u_array_t arr3 = UArray3d(2, 3, 4);
// 填入从 0 到 23 的数字。
UA_arange(&arr3, 2*3*4);
// 获取
float v = UA_get(&arr3, 1, 2, 3);
// v == 23
UA_set(&arr3, 1, 2, 3, 5.5);
v = UA_get(&arr3, 1, 2, 3);
// v == 5.5
return 0;
}
边栏推荐
- 如何用好数据科学?
- 企业转型升级之道:数字化转型,思想先行
- BFD原理与配置
- 攻防演练之战前扫雷:漏洞管理的5大措施
- 京东健康回应拟以 3.554 亿美元收购京东资产:与宠物健康产品品类相关
- LeetCode-64-最小路径和
- TDesign, which gave us benefits last time, will tell us its open source story today
- 微信公告号自动回复使用图灵机器人实现智能回复
- 雷达天线简介
- JD health responded that it planned to acquire JD assets with us $355.4 million: related to pet health product category
猜你喜欢
File常用工具类, 流相关运用 (记录)
从第三次技术革命看企业应用三大开发趋势
Paging SQL (rownum, row_number, deny_rank, rank)
Motion capture system for apple picking robot
中序和后序遍历构建二叉树[递归划分区间与回溯拼接子树+中后序和中前序的相似与不同]
89.(cesium篇)cesium聚合图(自定义图片)
LeetCode-64-最小路径和
Business Intelligence BI and business management decision-making thinking No. 3: business quality analysis
动作捕捉系统用于苹果采摘机器人
智能聊天机器人的优势在哪里?资深独立站卖家告诉你!
随机推荐
Basic composition of radar
Complex convolutional neural network: cv-cnn
What is the time complexity of the redis command?? (the actual question is about the underlying structure of redis)
微信公告号自动回复使用图灵机器人实现智能回复
EasyGBS调用获取实时快照接口时,出现白色方块该如何解决?
火山引擎入选国内首个《边缘计算产业全景图》
The way of enterprise transformation and upgrading: digital transformation, thinking first
pwm转0-5V/0-10V/1-5V线性信号变送器
12.udp protocol -bite
Polarimetric SAR surface classification
MySQL开发规范.pdf
PostgreSQL source code learning (23) -- transaction log ④ - log assembly
Taro2.* 小程序配置分享微信朋友圈
雷达天线简介
Why MySQL chooses b+ tree to store indexes
Google 软件版本经历周期
radar transmitter
Classe d'outils commune de fichier, application liée au flux (enregistrement)
NFT链游开发应用:2022年值得关注的6大NFT趋势
el-table-column行按钮防重控制loading