String là một mảng tế bào
Vâng, không thực sự .. Nó là một ma trận, nhưng tiếp tục đọc.
Tôi đoán mảng ô là loại dữ liệu thần bí nhất trong MATLAB. Vì vậy, hãy làm sáng tỏ nó một chút ;-)
Giả
fruits = {...
'banana',...
'apple',...
'orange'...
}
Trước hết số nguyên lập chỉ mục không cần thiết cho mảng nhỏ. Tốt hơn hết là sử dụng foreach giống như công trình xây dựng. Thật vậy,
for index = 1:numel(fruits)
fruits{index}
end
tương đương với
for fruit = fruits
fruit
end
phải không?
Vâng, không hoàn toàn. Vòng lặp đầu tiên tạo ra các chuỗi, trong khi chuỗi thứ hai cung cấp các ô. Bạn có thể kiểm tra xem nó với
for index = 1:numel(fruits)
[isstr(fruits{index}) iscell(fruits{index})]
end
for fruit = fruits
[isstr(fruit) iscell(fruit)]
end
, ví dụ: [1 0] và [0 1].
Nếu bạn có điểm khác biệt, thì bạn phải biết phải làm gì với ví dụ tiếp theo (trong trường hợp này thực sự liên quan đến câu hỏi của bạn (!) Tôi hứa!). Giả sử bạn cố gắng làm nối ngang trong một vòng lặp:
for fruit = fruits
[fruit 'is a fruit']
end
Bạn sẽ nhận được
ans =
'banana' 'is a fruit'
và vân vân. Tại sao? Rõ ràng mã này cố gắng ghép một mảng ô lồng nhau vào một chuỗi (một mảng ô có chứa một ma trận ký tự tạo thành chuỗi như 'chuối').Vì vậy, câu trả lời đúng là
sử dụng {:}
for fruit = fruits
[fruit{:} 'is a fruit']
end
kỳ diệu này đã được sản xuất dự kiến 'chuối là một loại trái cây', 'táo là loại quả' vv
gợi ý
Một vài gợi ý:
- Index miễn vòng lặp hoạt động độc đáo với cấu trúc như trong
for fruit = [fieldnames][1](fruits)'
- Trên đây là đúng cho mã nguồn mở quãng tám
- chuối không chỉ là trái cây, taxonomically nó cũng là một loại thảo dược ;-) giống như 'chuối' trong MATLAB là cả chuỗi và ma trận, nghĩa là khẳng định (isstr ('chuối') & & ismat ('chuối')), nhưng khẳng định (iscell ('chuối')) không thành công.
{:}
tương đương với cell2mat
PS
một giải pháp cho câu hỏi của bạn có thể trông như thế này:
Với
vcell = {...
'v' 576.5818 3.0286 576.9270;
'v' 576.5818 3.0286 576.9270
}
chỉ các loại số index-khôn ngoan bí mật để dây
vcell(cellfun(@isnumeric, vcell)) = cellfun(@(x) sprintf('%.5f', x), vcell(cellfun(@isnumeric, vcell)), 'UniformOutput', false)
Trên đầu ra đang
vcell =
'v' '576.58180' '3.02860' '576.92700'
'v' '576.58180' '3.02860' '576.92700'
mà có thể được nối.
Con đường để đi! Không bao giờ nói gravedigging không bao giờ giúp đỡ bất cứ ai. –
gọi hàm không cần thiết gọi là 'sprintf' một hack - là một lol –