当前位置:网站首页>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;
}边栏推荐
- Alibaba cloud experience Award: use polardb-x and Flink to build a large real-time data screen
- Detailed explanation of list set
- Google software version experience cycle
- 雷达相关内容简介
- JS 会有变量提升和函数提升
- The way of enterprise transformation and upgrading: digital transformation, thinking first
- Basic composition of radar
- TDesign, which gave us benefits last time, will tell us its open source story today
- 《网络是怎么样连接的》读书笔记 - WEB服务端请求和响应(五)
- Polarimetric SAR surface classification
猜你喜欢

防范企业数据泄露,就用网络安全产品堡垒机!

Middle order and post order traversal to construct binary tree [recursive partition interval and backtracking splicing subtree + similarity and difference between middle post order and middle pre orde

Andorid Jetpack Hilt

面试官:说一下MySQL事务隔离级别?

Google software version experience cycle

89.(cesium篇)cesium聚合图(自定义图片)

stlink故障修复

2022 OpenVINO DevCon 大揭秘!英特尔携众多合作伙伴深化开发者生态建设,释放AI产业创新潜能

cmake学习-2

ImgUtil 图片处理工具类,文字提取,图片水印
随机推荐
swoole TCP 分布式实现
JS will have variable promotion and function promotion
Is there any lack of dependence? An error is reported when flinksql is packaged and running, but there is no problem when the local idea runs. Solve it. Thanks
墨天轮“高可用架构”干货文档分享(含Oracle、MySQL、PG资料124篇)
Google software version experience cycle
我想知道我在南宁,到哪里开户比较好?另外,手机开户安全么?
《网络是怎么样连接的》读书笔记 - WEB服务端请求和响应(五)
再也不用担心窗体变形了
商业智能BI与业务管理决策思维之三:业务质量分析
TDesign, which gave us benefits last time, will tell us its open source story today
复数卷积神经网络:CV-CNN
Symfony framework security component firewall configuration
雷达天线简介
Excel中构建SQL语句
.NET程序配置文件操作(ini,cfg,config)
LeetCode-64-最小路径和
动态监听DOM元素高度变化
Scroll,你玩明白了嘛?
three.js和高德地图结合引入obj格式模型-效果演示
Mysql database naming conventions PDF